1

我已经有一个函数,我从数据库中获取数据并将其填充到组合框更改事件的 HTML 表中,基本上我正在使用 ajax 执行此操作。

但是每次我在组合框更改上调用数据库时都是无效的。所以,现在我决定在页面加载时将数据填充到 html 表中,然后从 HTML 表中过滤掉,而不是每次都去数据库过滤它。

那么有什么方法可以在组合框更改事件中从 html 表中过滤掉数据?或者可以在 html 表上调用 ajax?

谢谢。

4

2 回答 2

1

您可以在每个<tr>与组合框项目上的值匹配的类上放置类。选择选项后,显示任何具有与所选选项的值匹配的类的行。

<select id="options" multiple="multiple">
    <option value="red">Red</option>
    <option value="green">Green</option>
    <option value="blue">Blue</option>
    <option value="yellow">Yellow</option>
    <option value="black">Black</option>
</select>

<table>
    <tr class="red green">
        <td>red or green</td>
    </tr>
    <tr class="blue">
        <td>blue</td>
    </tr>
    <tr class="yellow black">
        <td>yellow or black</td>
    </tr>
    <tr class="blue yellow">
        <td>blue or yellow</td>
    </tr>
</table>

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript">
    $("select#options").change(function () {
        var selections = [];

        $(this).children(':selected').each(function (index, option) {
            selections.push(option.value);
        });

        console.log(selections);
        $("table tr").each(function (index, row) {
            $(row).hide();
            for(var i = 0; i < selections.length; i++) {
                if($(row).hasClass(selections[i])) {
                    $(row).show();
                    break;
                }
            }
        });
    });
</script>

那很有趣。jsfiddle

于 2013-06-30T21:21:34.310 回答
0

最合适的解决方案取决于有多少数据以及是否需要不同的表连接。

您可以将数据存储在 JavaScript 数组中,然后从该数组中检索您需要的数据并构建您的 HTML 表。

您可以使用库来促进对数据进行类似 SQL 的查询。看看jslinq。例子:

var myList = [
        {FirstName:"Chris",LastName:"Pearson"},
        {FirstName:"Kate",LastName:"Johnson"},
        {FirstName:"Josh",LastName:"Sutherland"},
        {FirstName:"John",LastName:"Ronald"},
        {FirstName:"Steve",LastName:"Pinkerton"}
        ];

var exampleArray = JSLINQ(myList)
        .Where(function(item){ return item.FirstName == "Chris"; })
        .OrderBy(function(item) { return item.FirstName; })
        .Select(function(item){ return item.FirstName; });

如果您不想只为页面提供所有数据(即有很多数据),那么您可以使用 AJAX 在需要时检索数据并存储它,以便如果再次需要它,您已经在浏览器中得到它。换句话说,每次从实际数据库中获取新数据时,都会将该数据添加到当前存储的任何内容中,直到最终您可能在浏览器中拥有数据库的完整副本。

根据数据的复杂性,您需要想出一种方法来了解您是否已经在浏览器中获得了所需的数据,或者是否需要新的 AJAX 请求。

如果您想要更量身定制的答案,可以编辑问题以包含数据库架构的详细信息和示例查询。

于 2013-06-30T21:33:47.370 回答