[英]Why $('*') doesn't work in jQuery
在下面的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>
*
選擇html
節點,然后嘗試將其包裝在一個strong
元素中,這可能是問題所在。
在控制台中,您應該看到類似以下的錯誤
未捕獲的HierarchyRequestError:無法在“節點”上執行“ insertBefore”:類型“ 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>ab c</li> <li>xy z</li> </ul>
注意:仍然不會給您想要的輸出,因為它將包裝所有祖先元素,而且您也不能包裝帶有strong
元素的li
所以,你可以將搜索范圍限制只對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>ab c</li> <li>xy z</li> </ul>
僅將文字換行
(function($) {
var pattern = /z/i;
$('*').find("ul li").filter(function(i,v) {
return pattern.test($(this).text());
}).wrap('<strong></strong>');
})(jQuery);
也許需要這些,請嘗試以下方法:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.