使用list.js排序和搜索不起作用

Pur*_*ood 6 javascript listjs

这是我第一次使用list.js,由于某种原因它无法正常工作.

这是一个实例. http://hartslogmuseum.com/bookhjr10/test.php 这里应该做什么 http://listjs.com/examples

这是我的代码.我只想搜索名字.

<div class="table-responsive">
<div id="catalog">
<input class="search" placeholder="Search" />
  <button class="sort" data-sort="name">
    Sort Name
  </button>
  <button class="sort" data-sort="cat">
    Sort Category
  </button>
 <h2> Catalog </h2>
<table class="list table-bordered table-striped">
<tr>
<td> <h2 class="name">Item Name</h2> </td>
<td><h2 class="cat">Item Category</h2></td>
<td> <h2>Thumbnail</h2></td>
<td> <h2 class="descr">Item Desc</h2> </td>
<td> <h2 class="time">Time Frame</h2> </td>
<td> <h2 class="donor">Donor</h2> </td>


</tr>
$resultSet = mysqli_query($conn,"SELECT * FROM bookhjr10_items");

While($row = mysqli_fetch_array($resultSet))
{
$i=0;   
echo "<tr>";
echo "<td class=\"name\">".$row['name']. "</td>";
echo "<td class=\"cat\">".$row['category']. "</td>";
echo "<td><a href=\"fullimage.php?id=".$row['id']."\" data-lightbox=\pic\"><img src=\"image.php?id=".$row['id']."\" alt=\"thumb-1\" /></a></td>";
echo "<td class=\"descr\">". $row['descr'] . "</td>";
echo "<td class=\"time\">". $row['time'] . "</td>";
echo "<td class=\"donor\">". $row['donor'] . "</td>";
echo "</tr>";
$i++;
}

?>
</table>
</div>
      </div>
      <script type="text/javascript">
var options = {
    valueNames: [ 'name' ]
};

var hackerList = new List('catalog', options);
</script>
Run Code Online (Sandbox Code Playgroud)

Adr*_* Be 15

你可能忘记的最低要求之一.

这些似乎是最低要求:

  1. 调用时指示表的父元素ID list.js
  2. 该表tbody必须具有该类list
  3. 如果表已有项目(大多数情况下,我会假设),选项valueNames参数是强制性的.这些值是要排序的列的类名(类名在每个定义的td,而不是在th-虽然你也可以把它添加到th).
  4. 用于排序的表头必须具有一个名称类 sort
  5. 用于排序必须有一个属性表头data-sort与匹配列的类名的名称的值进行排序

这里有几个的使用表(这是从list.js codepen例子http://listjs.com/examples/add-get-remove):

最小代码示例:

另见http://jsfiddle.net/d7fJs/

<!-- for a table with a parent div of id "my-cool-sortable-table-wrapper", -->
<!-- and columns of class names "gender", "age" & "city" -->

<div id="my-cool-sortable-table-wrapper">
    <table>
        <thead>
            <th class="sort" data-sort="gender">Gender</th>
            <th class="sort" data-sort="age">Age</th>
            <th class="sort" data-sort="city">City</th>
        </thead>
        <tbody class="list">
            <tr>
                <td class="gender">male</td>
                <td class="age">18</td>
                <td class="city">Berlin</td>
            </tr>
            <tr>
                <td class="gender">female</td>
                <td class="age">46</td>
                <td class="city">Reykjavik</td>
            </tr>
            <tr>
                <td class="gender">female</td>
                <td class="age">20</td>
                <td class="city">Lisboa</td>
            </tr>
            <!-- and so on ...-->
        </tbody>
    </table>
</div>

<script src="//cdnjs.cloudflare.com/ajax/libs/list.js/1.1.1/list.min.js"></script>
<script type="text/javascript">
    var options = {
        valueNames: [ 'gender', 'age', 'city' ]
    };
    var contactList = new List('my-cool-sortable-table-wrapper', options);
</script>
Run Code Online (Sandbox Code Playgroud)

注意:如果排序行为奇怪 - 即.排序是不正确-这可能是因为你缺少的基本要求之一.如果你挣扎,做的jsfiddle&问你对计算器的问题与链接.


如果你想避免缠绕元件使用该ID,而是使用自定义选择,您可以更换:

var contactList = new List('my-cool-sortable-table-wrapper', options);
Run Code Online (Sandbox Code Playgroud)

这样:

var wrapperElement = $('.my .custom .selector');
var contactList = new List(wrapperElement[0], options);
Run Code Online (Sandbox Code Playgroud)

看到:


如果要检测由List.js&触发的更改事件(这里我们相应地更新行类名)

contactList.on("updated", function(){
    $('#my-cool-sortable-table-wrapper tr').removeClass('odd').filter(':visible:odd').addClass("odd");
})
Run Code Online (Sandbox Code Playgroud)

List.js处理不同的事件类型.请参阅本页底部的完整列表http://listjs.com/docs/list-api


官方文件http://listjs.com/docs/options

  • 对于搜索/过滤,另一个(看似未记录的)要求似乎是搜索<input>必须在调用List构造函数时指定的div中(以及具有类"search").我知道OP只是询问排序,但你的答案更普遍适用,并且更适合使用List.js而不是官方文档,所以想在这里为其他人做一个说明. (4认同)

THe*_*per 2

将 list.js 与表一起使用时,您应该添加class="list"<tbody>标签而不是标签<table>

因此,在您的代码中更改这部分:

<table class="list table-bordered table-striped">
<tr>
Run Code Online (Sandbox Code Playgroud)

<table class="table-bordered table-striped">
<tbody class="list">
<tr>
Run Code Online (Sandbox Code Playgroud)

并且不要忘记添加一个</tbody>.