2012-06-02 2 views
3

Я пытаюсь создать динамический html через jquery, отфильтровать его для интересующей меня части и добавить этот раздел html к существующему элементу на странице, но не работает. Что я делаю неправильно в этой скрипке?Фильтрация динамического html с jquery

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» и «body» в динамически генерируемом html. Я просто должен был заменить или снять эти теги, и теперь он работает так, как ожидалось.

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

Я был слишком быстро принимать. Фильтр возвращает все (элементы заголовка и стиля из заголовка), а не только тег body: http://jsfiddle.net/dcwNJ/ – TugboatCaptain