在下面的jQuery代码中,我想突出显示包含“z”的行。不知何故,$('*')不起作用。如果我将其修改为$('li'),它将起作用。
<ul>
<li>a b c</li>
<li>x y z</li>
</ul>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script>
(function($) {
var pattern = /z/i;
$('*').filter(function() {
return pattern.test($(this).text());
}).wrap('<strong></strong>');
})(jQuery);
</script>
答案 0 :(得分:3)
*
也会选择html
节点,然后您尝试将其包含在可能是问题的strong
元素中。
在您的控制台中,您应该会看到类似
的错误Uncaught HierarchyRequestError:无法执行'insertBefore' 'Node':'STRONG'类型的节点可能不会插入到节点内 输入'#document'。
(function($) {
var pattern = /z/i;
var a = $('body *').filter(function() {
return pattern.test($(this).text());
}).wrap('<strong></strong>');
})(jQuery);
strong {
border: 1px solid red;
padding: 5px;
display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
<li>a b c</li>
<li>x y z</li>
</ul>
注意:它仍然不能提供所需的输出,因为它将包装所有祖先元素,也不能用li
元素包裹strong
因此,您可以将搜索范围仅限于li
ul li
,或者使用文本节点进行比较
(function($) {
var pattern = /z/i;
var a = $('*').contents().filter(function() {
return this.nodeType == 3 && pattern.test(this.nodeValue);
}).wrap('<strong></strong>');
})(jQuery);
strong {
border: 1px solid red;
padding: 5px;
display: inline-block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>a b c</li>
<li>x y z</li>
</ul>
答案 1 :(得分:0)
仅包装文字
(function($) {
var pattern = /z/i;
$('*').find("ul li").filter(function(i,v) {
return pattern.test($(this).text());
}).wrap('<strong></strong>');
})(jQuery);
答案 2 :(得分:-1)
也许需要这些,请尝试以下方法: