Javascript 检查是否有任何标记具有特定的内部HTML
如果id为“word”的div中的任何跨度的内部HTML值为v,我将如何编写返回true的jquery函数?对于选择器,我有:Javascript 检查是否有任何标记具有特定的内部HTML,javascript,jquery,html,iterator,Javascript,Jquery,Html,Iterator,如果id为“word”的div中的任何跨度的内部HTML值为v,我将如何编写返回true的jquery函数?对于选择器,我有: $('#word span').html() 我不知道迭代它们并返回布尔值的正确方法,因为当前我在该分区中有5个span标记。包含选择器 由于您是使用jQuery读取的,因此可以利用其.contains方法或“:contains”伪选择器: $("#word span").contains("word") 或 对于包含单词的每个span,这不会返回true,而是返回
$('#word span').html()
我不知道迭代它们并返回布尔值的正确方法,因为当前我在该分区中有5个span标记。包含
选择器
由于您是使用jQuery读取的,因此可以利用其.contains
方法或“:contains”伪选择器:
$("#word span").contains("word")
或
对于包含单词的每个span,这不会返回true,而是返回包含该单词的元素。您将得到一个匹配元素的列表,可以这样操作:
var $matched = $("word span").contains("word");
$matched.each(function (i, el) {
// do something with the el
});
参考文献
您可以使用
:contains
作为$(“#单词span:contains(v)”)
,但它会选择包含“v”的跨距,而不是将其作为精确值.html
仅返回所选第一个元素的html字符串,因此您可能希望使用进行迭代。每个都要进行精确比较:
var count = 0;
$("#word span").each(function () {
if ($.trim($(this).text()) === 'v') {
count++;
}
});
您可以使用filter
方法:
$("#word span").filter(function () {
return this.innerHTML === v; // in case that v is a variable
// return $(this).text() === 'v';
}).length;
在选择器中添加一个':contains(“+v+”)
并用空格或换行符过滤掉所有愚蠢的节点是否更好?然后,filter()
只应用于可能完全等于文本的文本节点。我从来没有实际比较过它们的速度。@leemedor Well包含
选择器选择包含特定值的元素,而不必选择其内容等于该值的元素(+隐藏字符),它选择
,v某物
,v
,它与精确匹配不同,因此,删除空白和其他隐藏字符在这里不是一个选项,在这些情况下,使用filter
和$。trim
是最佳选项。可能首先使用包含的组合?这样,您只缓存潜在的匹配项,然后仅通过一组集中的范围进行迭代,而不是一直缓存和迭代所有范围。我一点也不担心性能,我只是在阅读代码时从逻辑的角度来看它。这是contains的一个很好的替代方案,让我想知道contains的效率有多高,因为它必须在内部执行非常类似的操作。我将研究源代码。
$("#word span").filter(function () {
return this.innerHTML === v; // in case that v is a variable
// return $(this).text() === 'v';
}).length;