内部文本值的jQuery选择器语法

时间:2013-03-21 03:05:21

标签: jquery jquery-selectors

我正在尝试将click事件添加到由Telerik ASP.NET小部件生成的选项卡中。为了实验的目的,我已经将生成的HTML片段提升到静态页面中:

<HTML>
<HEAD>
<TITLE>sandpit</TITLE>
<SCRIPT TYPE="text/javascript" SRC="jquery-1.9.1.js"></SCRIPT>
<SCRIPT>
$(document).ready(function(){
  var foo = $("span.rtsTxt");
  var bar = foo.filter("[innerText='More']")
  bar.on('click',function(){alert('click');});
  alert('ready');
});
</SCRIPT>
</HEAD>
<BODY>
  <ul>
    <li class="rtsLI">
      <a class="rtsLink rtsAfter">
        <span class="rtsOut">
          <span class="rtsIn">
            <span class="rtsTxt">Preferences</span>
          </span>
        </span>
      </a>
    </li>
    <li class="rtsLI">
      <a class="rtsLink rtsAfter">
        <span class="rtsOut">
          <span class="rtsIn">
            <span class="rtsTxt">More</span>
          </span>
        </span>
      </a>
    </li>
  </ul>
</BODY>
</HTML>

调试显示foo包含两个预期的项目。但是,我无法弄清楚选择第二个语法,其中innerText的值是“更多”。

问题是我如何在显示的过滤器表达式中或直接在选择器字符串中表达innerText =='More'?

5 个答案:

答案 0 :(得分:7)

另一种选择将返回对象的元素的方法是使用filter,如下所示:

$(".rtsTxt").filter(function() {
    return $(this).text() == "More";
});   

fiddle

答案 1 :(得分:4)

试试:contains selector

var bar = foo.filter(":contains('More')")

这是jsfiddle demo显示它正常工作。

警告:虽然这适用于问题中的html,但:contains选择器将匹配包含给定文本的任何元素,而不仅仅是文本等于给定文本的元素。 (正如@RAS在下面的评论中指出的那样。)

答案 2 :(得分:1)

这是不可能的吗?

if ($("span.rtsTxt").html() == "More") {
   // do stuff
}

答案 3 :(得分:0)

使用包含选择器:

var bar = $("span.rtsTxt:contains('More')")
bar.on('click',function(){alert('click');});  
bar.html("yup")

工作示例:http://jsfiddle.net/basarat/w38VE/4/

答案 4 :(得分:0)

jQuery.expr[":"].text = jQuery.expr.createPseudo(function(arg)
{
    return function( elem ) {
        return jQuery(elem).text().toLowerCase() == arg;
    };
});
$("span.rtsTxt:text('More')")

仅返回内部文字等于&#39;更多&#39;

的元素