jquery 我怎样才能切换排序顺序与引导页上的按钮,而无需重新加载页面?

ehxuflar  于 2023-10-17  发布在  jQuery
关注(0)|答案(1)|浏览(114)

我正在为现有的应用程序构建一个模板,并希望包含一个按钮来更改网页上显示的元素的排序顺序。页面使用Bootstrap 5.3进行样式化,所以我已经有了jQuery和Bootstrap的其他功能。
我只是想要一个按钮,反转允许切换排序顺序数组的顺序,并反映在页面上,而无需重新加载它。
以下是一些条目的HTML:

<button type="button" onClick="reverseEntries();">Reverse order of entries</button>
<div id="entries">
  <div class="card">
    <h2>Entry 0</h2>
  </div>
  <div class="card">
    <h2>Entry 1</h2>
  </div>
  <div class="card">
    <h2>Entry 2</h2>
  </div>
</div>

我想要排序的元素可以从名为entries的JavaScript对象获得,该对象在页面加载时已经填充。为了简单起见,你可以把它当作一个数组:

entries = [
   'Entry 0',
   'Entry 1',
   'Entry 2'
]

模板引擎是dot.js,它遍历数组并写入每个div客户端-即每个数组成员值被写入H2标签之间。
这是一个模板,它构建了html片段。

<div id="entries">
  {{~ entries:entry:index}} <!-- iterates through the entries array -->
  <div class="card">
    <h2>{{=entry}}</h2>
  </div>
  {{~}} <!-- end of iteration block -->
</div>

我可以使用entries.reverse()来反转数组的顺序,但我不确定如何在反转数组后重做页面。
以下是到目前为止的函数:

function reverseEntries(){
  entries = entries.reverse(); // this successfully reverses the array
  // how can I update the page so the entries appear in the new order of the array.
}

我可以通过使用不同的查询重新加载页面来实现相同的输出,但由于所有数据都已经在JavaScript中,我更喜欢在客户端完成。

vawmfj5a

vawmfj5a1#

感谢评论中的一些建议和探索性问题,我弄清楚了我需要使用jQuery来刷新模板中的HTML。
关键是理解doT.js如何编写页面。
在反转数组之后,我需要重新编译包含数据的相关模板,然后使用jQuery重写相关容器中的HTML。

function reverseEntriesOrder() {
  var template = doT.template("entries.html"); // Loads the template text into doT
  var resultHTML = template(entries.reverse()); // applies the changed data to the template
  $('#main').html(resultHTML); // updates the HTML in the main DIV with the new value
}

现在我可以从onClick事件调用reverseEntriesOrder(),项目的顺序将被更新。

相关问题