0

次の簡単な例のように、jQuery を使用して HTML を解析しようとしています。

$('<html><body><div><p>Test</p></div></body>')

さて、結果のオブジェクトは少しがっかりしています。.html() 関数を使用すると、ルート要素内のすべてを取得する必要があります。

残念ながら、jQuery は<html>, <body>&<head>タグを破棄します。

だから私は得る:

$('<html><body><div><p>Test</p></div></body>').html()
"<p>Test</p>"

体の代わりに。最初のものをルート要素と見なします。

私はこれを使用できます:

$('<html><body><div><p>Test</p></div></body>')[0].outerHTML
"<div><p>Test</p></div>"

しかし、解析したいタグがまだありません。

それで、どうすればこれを回避できますか?どうにかして、新しい jQuery dom ウィンドウ オブジェクトを作成できますか?

4

4 に答える 4

1

I don't know why you're using this, but a solution (not sure if best) for your problem would be use the method .append()

$('<html>').append('<body>').append('<div>').append('<p>Test</p>');

This will create a <html> tag and will fill it with the other elements.

于 2013-01-21T02:17:49.273 に答える
1

jQuery に HTML 文字列を渡すと、ドキュメント全体ではなくドキュメント フラグメントが作成されます。<body>そのため、やなど、あなたが求めている部分はありません<head>

これらすべてのパーツが必要な場合は、iframe のような別のものを作成できます。

于 2013-01-21T02:19:15.970 に答える
1

奇妙なことに、これは Chrome と Firefox の両方で完全に機能します。

$('<html>').html('<html><body><div><p>Test</p></div></body>')

タグを追加して<head>も壊れません。

<body>元のセレクターにタグを追加すると、機能しなくなります。

> $('<html></html>')
[<html>​&lt;/html>​]
> $('<html><body></body></html>')
[]
于 2013-01-21T02:19:19.557 に答える
1

jQuery ではこれができないと確信しています。ただし、ドキュメントを XML として扱い、そのように解析できます。

$.parseXML('<html><body><div><p>Test</p></div></body></html>').childNodes[0]

$.parseXMLXML ドキュメントを作成し.childNodes[0]、ノードになり<html>ます。

于 2013-01-21T02:27:02.583 に答える