我正在尝试从尚未添加到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之前访问该文本?
答案 0 :(得分:4)
由于您已经定义了jQuery对象,因此您只需使用 text() :
fragment.text()
答案 1 :(得分:1)
你没有得到它,因为你做错了。 片段内部没有id作为事物的元素。 Infact片段是具有id作为事物的元素。所以你可以使用
fragment.html()
或
fragment.text()
var fragment = $("<span id='outer'> <span id='inner'> Inner Span </span> </span>");
console.log($('#inner', fragment).html()); //Says Inner Span
<强>更新强> 在您更新的问题中,您正在创建片段作为跨度数组,因此您不必查找具有id的元素,而是必须从数组索引中获取元素。
// 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
包装)。
感谢大家提供宝贵的建议!!