もう少し詳しく答えると、ここでの本当の問題は、$()
からの文字列をラップするために使用されること$("html").html()
です。jQueryのドキュメントによると:
提供された生のHTMLの文字列からその場でDOM要素を作成します。
複雑なHTMLを渡す場合、一部のブラウザは、提供されたHTMLソースを正確に複製するDOMを生成しない場合があります。前述のように、ブラウザの.innerHTML
プロパティを使用して、渡されたHTMLを解析し、現在のドキュメントに挿入します。<html>
このプロセス中に、一部のブラウザは、、、<title>
または要素などの特定の要素を除外し<head>
ます。その結果、挿入された要素は、渡された元の文字列を表していない可能性があります。(したがって、一方のブラウザでは、もう一方のブラウザではタイトルが見つからない場合があります)
文字列を使用するとすぐに$
、解析されたコレクションが取得されます...ただし、使用したいデータの一部が削除される可能性があります...1つのドキュメントで2つの本文要素を使用することはできません
しかし、$( "html")。children()。filter( "body")は機能するので、一般的に言って、私はあなたの質問に「はい」と答えます。
私はあなたがすでに解決策を見つけたと思います;)しかしそれを言及するだけです:私は$
呼び出しをスキップして単にsubstringやindexOfのようなネイティブメソッドを使用することを強くお勧めします
// try in the browser console
var myString = "<html><head></head><body>foobar</body></html>";
myString.substring(myString.indexOf("<body>"), myString.indexOf("</body>") + 7);
"<body>foobar</body>"
純粋な文字列であるため、ajax応答でもまったく同じように機能するはずです。bodyタグを抽出する必要がない場合:
// try in the browser console
var myString = "<html><head></head><body>foobar</body></html>";
myString.substring(myString.indexOf("<body>") + 6, myString.indexOf("</body>"));
"foobar"
.html()
注:パフォーマンスを見ると、ネイティブ操作は、の再ラップと呼び出しに必要な時間の半分未満で実行されます.filter()