jQuery中更改的孩子没有在父母

问题描述:

我有下面的代码仍然存在。但是,当我在更改后输出数据时,类.b已消失。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"); 
+0

我的问题是简化了很多。显然在我的例子中,每个都不是必需的,但是在我的真实生活中是这样。 – Horen 2013-04-22 16:35:22

+0

@霍伦:好吧,但这只是一个方面的说明。要点是你需要引用新的DOM元素的创建,因为jQuery不做字符串操作。 – 2013-04-22 16:36:14

+0

...如果你想看到新的标记,抓住第一个元素,并使用'.outerHTML',如:'elems [0] .outerHTML' – 2013-04-22 16:37:40

的原因是,当你说$(data)它创建了一个从DOM结构你没有修改字符串data

字符串和dom在那里操作后

+0

是的,但不应该改变$(数据)? – Horen 2013-04-22 16:34:10

+0

@Horen'$(data)'返回将被修改的dom结构 – 2013-04-22 16:36:46

+0

好了,将'console.log(data);'改为'console.log($(data));'仍然不显示更改 – Horen 2013-04-22 16:44:23

我认为你需要这样做:

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>