0

我有一个文本字符串,我正在尝试使用 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 

谢谢。

4

2 回答 2

9

你想用filter(),不是find()

var text ="<span id=\"blah1\">Y</span><br/><span id=\"blah2\">o</span><br/>";
var spans = $(text).filter('span');
console.log(spans.length);

jsFiddle

来自 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 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);
于 2011-11-07T02:35:20.047 回答
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/

或将其包装在 a 中<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 包装在 a<div>中可能是您​​最好的选择,这样您就不必担心所需元素的深度。

于 2011-11-07T02:38:56.860 回答