javascript - 为什么 jQuery 的 :contains count unexpected in my code?

标签 javascript jquery jquery-selectors

我有一个带有两个参数的函数:第一个是要计数的字符串,第二个是 HTML 元素的 id,该函数应该在该元素中计算该字符串的出现次数。

function countString(searchString, elementToSearchIn) {
    return $("#"+elementToSearchIn+" *:contains("+searchString+")").length;
    // In this example, call will be $("#searchElement *:contains('Apple')").length;
}

<table id="searchElement" border="1">
  <tr>
    <th>Apple</th>
    <th>Apple</th>
    <th>Banana</th>
  </tr>
  <tr>
    <td>Apple</td>
    <td>Orange</td>
    <td>Banana</td>
  </tr>
</table>

我设置了一个小 fiddle 来演示该问题:例如,我的 table 中有 3 次“Apple”,但 countString 返回 6。

为什么我的函数没有返回正确的计数?

https://jsfiddle.net/v10swbff/

最佳答案

问题是 *:contains 与 TD、TH AND TR 匹配。因此计数为 6(每个 TR 一个,然后计数预期的 TH 和 TD)。要修复此问题,您可以分别检查 TH 和 TD,如下所示:

function countString(searchString, elementToSearchIn) {
    var thCount = $("#"+elementToSearchIn+" th:contains("+searchString+")").length;
    var tdCount = $("#"+elementToSearchIn+" td:contains("+searchString+")").length;
    return thCount + tdCount;
}

更新了 JSFiddle:https://jsfiddle.net/v10swbff/1/

关于javascript - 为什么 jQuery 的 :contains count unexpected in my code?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30716985/

相关文章:

javascript - DropzoneJS : Prevent uploading and displaying unsupported files

javascript - 如何通过匹配id将数组插入对象

javascript - 客户端未使用 Socket.io 和 Node.js 实时更新

javascript - ReactJS - 无法读取新路由器未定义的属性 'location'

javascript - 在 Bootstrap 3 上触发嵌套的选项卡 Pane

javascript - $ ("#ELEMENT_ID") vs $ ('div[id="ELEMENT_ID"]')

jQuery 选择器 : Id Ends With?

javascript - 使用 jquery,获取具有特定类名的 "next"文本框的最佳方法是什么

javascript - 使用 Javascript 根据现有值更改属性值

php - jquery更新mysql表