在jQuery对象中按ID选择以获取文本

时间:2013-04-14 14:46:21

标签: jquery

我正在尝试从尚未添加到DOM的jQuery对象中获取文本。 所以:

var fragment = $("<span id='thing'>stuff</span><span id='thing2'>stuff2</span>");

但这些都不会起作用(尝试获取文本“stuff2”):

var test1 = fragment.find("#thing2").text();
var test2 = $("#thing2", fragment).text(); // trying to use fragment as the context

谁能告诉我为什么不呢?如何在将jQuery对象添加到DOM之前访问该文本?

4 个答案:

答案 0 :(得分:4)

由于您已经定义了jQuery对象,因此您只需使用 text()

fragment.text()

答案 1 :(得分:1)

你没有得到它,因为你做错了。 片段内部没有id作为事物的元素。 Infact片段是具有id作为事物的元素。所以你可以使用

fragment.html() 

fragment.text()

See this Bin example 1

var fragment = $("<span id='outer'> <span id='inner'> Inner Span </span> </span>");
console.log($('#inner', fragment).html()); //Says Inner Span

<强>更新 在您更新的问题中,您正在创建片段作为跨度数组,因此您不必查找具有id的元素,而是必须从数组索引中获取元素。

See this bin example 2

// This time fragment2 is an array
var fragment2 = $("<span id='outer'> Outer Span </span><span id='inner'> Inner Span </span>");

console.log(fragment2.length);
console.log(fragment2.eq(0).html());

答案 2 :(得分:0)

查看此示例:Bin Code

var final = $("<span id='outer'> Outer Span </span><span id='inner'> Inner Span </span>");
// Virtual wrapper
var div = $("<div>").append(final);
console.log($("#inner", div).html());

答案 3 :(得分:0)

我明白了。感谢“Juhana”,我只需要使用filter()而不是find()。

所以改变: var test1 = fragment.find("#thing2").text(); // returns nothing 于:
var test1 = fragment.filter("#thing2").text(); // returns 'stuff2'

filter()有效而不是find()的原因是fragment中我创建了一个span元素数组,而find()只搜索传递的对象的子元素,其元素在fragment中没有。如果我将filter中的两个跨度与另一个span包裹在一起,那么有一个带子节点的元素,find()将起作用。或者,在这种情况下可以使用filter(),因为它搜索所有元素,而不仅仅是子元素(因此不需要使用span包装)。

感谢大家提供宝贵的建议!!