2012-12-27 50 views
3

我怎么会写,如果ID为“字”一个div内的任何跨距值V的内部HTML返回true的jQuery的功能?对于选择,我有:检查是否有标签有一定的内部HTML

$('#word span').html() 

我很困惑,通过他们进行迭代,并返回一个布尔值,因为目前我有一个专区内5个span标签的正确方法。

回答

4

您可以使用:contains作为$("#word span:contains(v)"),但选择横跨该包含'v',而不是将其作为确切的值。 .html只返回选择第一元素的HTML字符串,所以你可能要与.each迭代,并做了详细的对比:

var count = 0; 
$("#word span").each(function() { 
    if ($.trim($(this).text()) === 'v') { 
     count++; 
    } 
}); 
+0

也许组合从而首先使用'contains'?这样,你只缓存潜在的匹配,然后只通过一组重点跨越,而不是缓存和迭代所有跨越所有时间。我根本不担心表现,我只是在阅读代码时从逻辑的角度来看它。 – Nope

+0

这是包含的一个很好的选择,让我想知道包含的效率如何,因为它必须在内部做一些非常相似的事情。我打算查看源代码。 – Austin

1

contains选择

由于您使用jQuery alread,你可以把它.contains方法的优点或 ':包含' 伪选择:

$("#word span").contains("word") 

OR

$("#word span:contains(word)") 

对于包含单词每个跨度这将不会返回true,而是ELE包含那个词的内容。你会留下匹配的元素的列表,可以被操纵,像这样:

var $matched = $("word span").contains("word"); 

$matched.each(function (i, el) { 
    // do something with the el 
}); 

参考

http://api.jquery.com/jQuery.contains/

2

您可以使用filter方法:

$("#word span").filter(function() { 
     return this.innerHTML === v; // in case that v is a variable 
     // return $(this).text() === 'v'; 
}).length; 
+0

向选择器添加'':contains('+ v +')'是否更好,并用空格或换行符过滤掉所有愚蠢的节点?然后'filter()'仅适用于文本节点,可以完全等同文本。我从来没有真正比较他们的速度。 –

+0

@LeeMeador Well'contains'选择器选择包含_contain_特定值的元素,而不是那些它们的内容等于该值的元素(+ _hidden characters_),它选择'\ nv','v something','v',它不同于完全匹配,所以删除空格和其他隐藏字符不是一个选项,在这种情况下,使用'filter'和'$ .trim'是最好的选择。 – undefined

相关问题