2013-04-22 71 views

回答

2

您需要存儲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

0

的原因是,當你說$(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

0

我認爲你需要這樣做:

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

1

在你的情況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>