Uncaught TypeError: $(...)[index].hide/show is not a function

Uncaught TypeError: $(...)[index].hide/show is not a function

我正在为我的站点创建一个 jQuery 搜索脚本,但我收到以下错误:

Uncaught TypeError: $(...)[index].hide is not a function (search.js:9)
Uncaught TypeError: $(...)[index].show is not a function (search.js:7)

我知道是什么原因造成的,但我就是不知道为什么。我有一个包含多个 tr 元素的 table,每个元素都以某种方式包含我要搜索的 "mod" 的名称。这是我的搜索脚本 (search.js):

var keystroke = 0;
$( "#simpleSearch" ).on("keyup", function() {
    keystroke = keystroke + 1;
    $.each($(".mod"), function(index, value) {
        var searchQuery = document.getElementById("simpleSearch").value;
        if (searchQuery == "") {
            $(".mod")[index].show();
        } else {
            $(".mod")[index].hide().filter(function() {
                return value.children[0].children[0].value.toLowerCase().includes(searchQuery.toLowerCase());
            })
        }
    })
})

这是我要搜索的 table:

<table class="table table-hover table-versions-hover modlist">
    <thead>
        <tr>
            <th>
                Mod Name
            </th>
            <th>
                Author(s)
            </th>
        </tr>
    </thead>
    <tbody>
        <tr class="mod">
            <th>
                <a href="Mod%20Link" target="_blank">Mod Name</a>
                <p>
                    This is the description of the mod. This can include any
                    information on what it does or how it works. This
                    description can only be 2 lines long, nothing over, not
                    even a little bit.
                </p>
                <span data-toggle="tooltip" data-placement="top" title=
                "Tooltip on top" class=
                "label label-default">Universal</span>
            </th>
            <th>
                Author(s)
            </th>
        </tr>
        <tr class="mod">
            <th>
                <a href="Mod%20Link" target="_blank">Mod Name #2</a>
                <p>
                    This is the description of the mod. This can include any
                    information on what it does or how it works. This
                    description can only be 2 lines long, nothing over, not
                    even a little bit.
                </p>
                <span data-toggle="tooltip" data-placement="top" title=
                    "Tooltip on top" class=
                    "label label-default">Universal</span>
            </th>
            <th>
                Author(s)
            </th>
        </tr>
    </tbody>
</table>

$(".mod") 创建一个 jQuery 对象,其中包含对与 ".mod" 选择器匹配的任何 DOM 元素的引用。 jQuery 对象是一个类似数组的对象,其方法如 .hide().show() 对 "array" 中的任何 DOM 元素执行操作。

但是 $(".mod")[index] 获得了对实际 DOM 元素的引用,而 DOM 元素没有 .hide().show() 方法。这就是您收到错误 $(...)[index].hide is not a function.

的原因

要仅在特定索引处的元素上调用 .hide().show()(或其他 jQuery 方法),您可以使用 .eq() method,它会创建另一个jQuery 对象仅包含指定索引处的元素。因为结果仍然是一个 jQuery 对象,所以你可以在它上面使用像 .show() 这样的方法:

$(".mod").eq(index).show();