【问题标题】:Filter elements out of a jquery object based on text content根据文本内容从 jquery 对象中过滤元素
【发布时间】:2013-08-21 10:38:46
【问题描述】:

我正在尝试将 contains 与 'this' 关键字一起使用,但它给出了错误。

JS

$(function(){
    var check=$('ul').find('li').filter(function(){
        return $(this:contains('two')).css('color','red')
    })
})

HTML

<ul>
    <li id="one">one</li>
    <li id="two">two</li>
    <li id="one">one</li>
    <li id="two">two</li>
    <li id="one">one</li>
    <li id="two">two</li>
    <li id="one">one</li>
    <li id="two">two</li>
    <li id="one">one</li>
    <li id="two">two</li>
</ul>

【问题讨论】:

  • 您要确保其中存在“两个”吗?或者“两个”是其中唯一的东西?
  • 看起来您缺少右括号:$(this).contains(...
  • var check = $("ul li:contains('two')").css('color', 'red');
  • 您的语法看起来很糟糕,并且您对contains 的使用不知情。
  • ID 必须在页面上是唯一的。您的代码可能仅用于演示目的,但您需要了解此限制

标签: javascript jquery dom jquery-selectors dom-manipulation


【解决方案1】:

这是你要找的吗?

Fiddle

$(function () {
    $('ul').find('li').filter(function () {
        return this.innerHTML == 'two';
    }).css('color','red')
})

或者在元素的任何地方匹配它(而不是只有“两个”在它里面):

Fiddle

$(function () {
    $('ul').find('li').filter(function () {
        return /two/.test(this.innerHTML);
    }).css('color','red')
})

另外,如果重要的话...链接方法 (.find().filter()) 似乎比使用 contains 更快:

Performance test created for this specifically
Another related test

您的 id 应该是唯一的 - 但我假设它只是示例代码的复制/粘贴,并且您的实际代码中实际上没有重复的 id。

【讨论】:

    【解决方案2】:

    没有filter那么简单

    $("ul li:contains('two')").css('color', 'red');
    

    WORKING DEMO

    【讨论】:

      【解决方案3】:
      $(this).text() == 'two';
      

      获取当前 li 的文本并检查它是否具有值“two”。

      【讨论】:

      • 我明白你在说什么
      猜你喜欢
      • 2012-01-25
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-02
      • 2011-10-16
      • 1970-01-01
      • 2019-01-28
      相关资源
      最近更新 更多