我有一个文本字符串我试图选择使用jQuery的跨度。我想抓住没有将元素添加到dom中的跨度 - 如果可能的话?
在阅读jquery文档后,我假设我可以通过将字符串包装在jquery选择器标记中来创建片段,然后使用.find()来查找我想要的元素。
我的代码与此类似,但从最后一行的外观来看,显然没有选择任何跨度;任何帮助将不胜感激:
// 'text' is normally generated automatically...
// just made it an escaped string for example purposes.
var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $(text).find('span');
console.log(text); // => <span id="blah1">Y</span><br/><span id="blah2">o</span><br/>
console.log(spans.length); // => 0
感谢。
答案 0 :(得分:9)
var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $(text).filter('span');
console.log(spans.length);
来自jQuery文档
过滤器:
针对每个元素测试提供的选择器;所有元素 匹配选择器将包含在结果中。
查找
.find()方法允许我们搜索后代 这些元素在DOM树中构造一个新的jQuery对象 匹配元素。
使用你的html片段,没有包装元素,因此没有后代,因此find()不起作用。
你基本上是这样做的:
var elems = jQuery("<span id=\"blah1\">Y</span>").add("<br/>").add("<span id=\"blah2\">o</span>").add("<br/>");
如果您希望查找使用find()
,则需要将其包含在元素中。
var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = jQuery("<div></div>").append(text).find("span");
console.log(spans.length);
答案 1 :(得分:1)
您希望在这种情况下使用filter
:
var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $(text).filter('span');
console.log(spans.length); // 2
演示:http://jsfiddle.net/ambiguous/TGY3J/
或者将其打包在<div>
中并使用find
:
var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $('<div>' + text + '</div>').find('span');
console.log(spans.length); // 2
演示:http://jsfiddle.net/ambiguous/qbCjk/
find
适用于后代,但没有<div>
包装,您的$(text)
没有任何<span>
个后代。将您的HTML包装在<div>
中可能是您最好的选择,这样您就不必担心所需元素的深度。