我正在尝试将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'?
答案 0 :(得分:7)
另一种选择将返回对象的元素的方法是使用filter,如下所示:
$(".rtsTxt").filter(function() {
return $(this).text() == "More";
});
答案 1 :(得分:4)
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")
答案 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;
的元素