我发现通过 $() 创建的 HTML/DOM 直到添加到文档后才能被搜索。这是正常现象还是我做错了什么?
这是一个演示: http://jsfiddle.net/5dVc8/ 更新:
原来我的问题太简单了。 @RocketHazmat的答案确实解决了我最初提出的问题,但当我去使用这些信息时,发现我不够具体。 事实证明,我需要匹配根元素和/或子元素。似乎如@RocketHazmat所说,.find()匹配子元素,但.filter()只匹配根元素。
以下是更新后的片段和新的演示:
var html = "<div data-test='test'>testdiv</div>";
// Convert HTML string to an orphaned JQ DOM object
var dom = $(html);
// Search orphaned DOM for element(s) with the specified attr
var found1 = dom.find('[data-test]');
// --> found1.length == 0, why not 1?
// Now insert the orphaned DOM into the document
$('#content').html(dom);
// And now JQ will find the desired elements
var found2 = $('[data-test]');
// --> found2.length is 1, as expected
这是一个演示: http://jsfiddle.net/5dVc8/ 更新:
原来我的问题太简单了。 @RocketHazmat的答案确实解决了我最初提出的问题,但当我去使用这些信息时,发现我不够具体。 事实证明,我需要匹配根元素和/或子元素。似乎如@RocketHazmat所说,.find()匹配子元素,但.filter()只匹配根元素。
以下是更新后的片段和新的演示:
var html = "<div data-test='test1'>"; // Root
html += "<div data-test='test2'></div>"; // Child
html += "</div>";
// Convert HTML string to an orphaned JQ DOM object
var dom = $(html);
// Search orphaned DOM object for element(s) with the specified attr
// (We'll find none)
var found1 = dom.find('[data-test]');
$('#count1').html('count1='+found1.length+", val="+found1.attr('data-test'));
// Search orphaned DOM object for element(s) with the specified attr
// (We'll find none)
var found2 = dom.filter('[data-test]');
$('#count2').html('count2='+found2.length+", val="+found2.attr('data-test'));
// Now append the orphaned DOM to the document
$('#content').html(dom);
// And now JQ will find the desired elements
var found3 = $('[data-test]');
$('#count3').html('count3='+found3.length);
以下是更新过的示例: http://jsfiddle.net/XyDSg/2/
.filter()
可以找到根节点(或根节点,例如当执行$('div').filter(...)
时)。我认为没有一种内置的方法可以同时搜索两者。 - gen_Eric<div>
包装你的HTML,然后使用.find()
。var dom = $('<div>'+html+'</div>'); var found1 = dom.find(...)
。 - gen_Eric