2012-06-02 124 views
3

我試圖通過jquery創建一些動態html,將它過濾到我感興趣的部分,並將該部分的html附加到頁面上的現有元素,但它不工作。我在這個小提琴上做錯了什麼?用jquery過濾動態html

http://jsfiddle.net/3zKeL/4/

HTML:

<div id="output">This is the output:<br></div> 

JQ:

var response = "<html><body><h1>hello</h1></body></html>"; 
$(response).filter("body").appendTo("#output"); 
+0

如果你'的console.log($(響應))',你將看到的只是'[

你好

]',所以,你可以用'$(響應).appendTo(「#output」);' –

回答

0

好了,想通了這一點。當jQuery遇到動態生成的html中的「html」和「body」標記時,jQuery會默默嘔吐。我只需要替換或剝離這些標籤,現在它按預期工作。

http://jsfiddle.net/pqyeM/13/

var response = "<html><head><title>test</title><style>body{font-size:.9em;}</style></head><body bgcolor=\"white\"><h1>hello</h1></body></html>"; 

// we have to remove/replace certain tags or jquery will vomit with unexpected results 
var modifiedResponse = response.replace("<html>", "").replace("</html>", "").replace("<body", "<div id='content'").replace("</body>", "</div>"); 

var wrappedSet = $(modifiedResponse); 

wrappedSet.filter("div[id='content']").appendTo("#output"); 
3
$(response) 
      .filter(function() { 
      return $("body"); 
      }) 
      .appendTo("#output"); 

DEMO

你也可以做

$('<div/>')   // add response to fake div 
    .append(response) 
    .find('body')  // find your target 
    .appendTo('#output'); // append the target 

DEMO

+0

我是接受過快。過濾器正在返回所有內容(head標籤中的標題和樣式元素),而不僅僅是body標籤的內容:http://jsfiddle.net/dcwNJ/ – TugboatCaptain