2011-12-13 10 views
2

私はのテキストを持っています。 テキストをdomオブジェクトに変換する必要があります。body要素を抽出し、それを私のdomに追加してください。テキストとして表されたhtmlページをdomオブジェクトに変換する

私はテキストを変換し、 body要素を抽出するために、次のコードを使用している

$('body', $(text)).length 

と:いずれの場合も

$(text).filter('body').length 

それはテストするために0 ...

を返します。http://jsfiddle.net/wEyvr/1/

+3

あなたはjsfiddleにあなたのテキストを入れてもらえますか?あなたの最初のアプローチは有効です。 – StuperUser

+0

2番目の方法は、 'filter'の代わりに' find'を使うと有効に見えます。 – kojiro

答えて

2

jQueryはpです非標準的な方法でHTML全体をアーキングするので、$(html)は期待どおりに機能しません。

あなたはそこから正規表現と作品を使用してbodyタグの内容を抽出することができます。

// get the content of the body tags 
var body = $(text.match(/<body[\s\S]*?>([\s\S]*?)<\/body>/i)[1]); 

// append the content to our DOM 
body.appendTo('body'); 

// bonus - to be able to fully use find -> we need to add single parent 
var findBody = $("<body />").html(body.clone()); 

// now we are able to use selectors and have fun 
findBody.find("div.cls").appendTo('body'); 

HEREは、作業コードです。

EDIT:直接追加とセレクタの両方を表示するようにコードを変更しました。このような

+1

+1 DTD/タグ/ タグなしで文字列を取得しようとすると良いでしょう。ちょうどタグで、文字列をjQueryに渡す前に前処理する必要がありません。正規表現でHTMLを解析する?ミーム・アホイ! – StuperUser

0

何か:

var ifr = $("<iframe>"), 
    doc = ifr.appendTo("body")[0].contentWindow.document, 
    bodyLength; 

doc.open(); 
doc.write(text); 
doc.close(); 

bodyLength = ifr.contents().find("body").length; 

ifr.remove(); 

alert(bodyLength); 

http://jsfiddle.net/wEyvr/2/

関連する問題