jQuery中更改的孩子没有在父母
答
您需要存储DOM元素创建的结果。字符串本身从不修改。
var data = "<div><p class='a'>Text</p></div>";
// Create the elements from the markup
var elems = $(data);
// Modify the elements
elems.find(".a").each(function(){
$(this).addClass("b");
});
// Append the elements to the DOM
elems.appendTo("body");
实际上,你可以缩短你的代码:
$(data).appendTo("body").find(".a").addClass("b");
答
我认为你需要这样做:
var data = "<div><p class='a'>Text</p></div>";
$(data).find('.a').each(function(){
$(this).addClass("b");
}).appendTo('body'); //replace body with the target container
+0
我不想在更改课程之前将数据附加到主体。 – Horen 2013-04-22 16:36:55
+0
编辑它 - 这看起来更好/工作? – 2013-04-22 16:39:42
答
在你的情况var data
是一个字符串。
但是当你做$(data)
它将其转换为jQuery对象并存储在内存中。新B级被添加到jQuery对象不是字符串data
你可以尝试这样的事情
var data = "<div><p class='a'>Text</p></div>";
var $data = ""; // to store the jquery object
$data = $(data); // converts string to jQuery object
$data.find(".a").each(function(){
$(this).addClass("b");
})
console.log($data.get(0).outerHTML); //<div><p class='a b'>Text</p></div>
我的问题是简化了很多。显然在我的例子中,每个都不是必需的,但是在我的真实生活中是这样。 – Horen 2013-04-22 16:35:22
@霍伦:好吧,但这只是一个方面的说明。要点是你需要引用新的DOM元素的创建,因为jQuery不做字符串操作。 – 2013-04-22 16:36:14
...如果你想看到新的标记,抓住第一个元素,并使用'.outerHTML',如:'elems [0] .outerHTML' – 2013-04-22 16:37:40