1

すべての属性とその値を文字列として持つ要素開始タグを返すネイティブ/jQuery メソッドを探しています。

このように見えるはずです。

HTML:

<body id="mybody" class="someclass">

</body>

存在しない jQuery 関数:

$("body").tagAsString(); //returns <body id="mybody" class="someclass">

または存在しないネイティブ関数:

document.getElementsByTagName("body")[0].tagToString();

要素のすべての属性とその値を取得できますが、HTML にあるだけなので、正確な文字列が必要です。開始タグ全体の長さを探しています。

4

4 に答える 4

4

問題は、HTML が解析されると、ブラウザーはそれを気にしなくなることです。ブラウザが解釈した DOM 構造だけが重要です。HTMLはなくなりました。カプット。終了した。無視されました。

HTML を解析した後、ブラウザーが HTML をどのように認識するか。

ブラウザは「元の HTML」を保持しません。実際、ブラウザは HTML をあまり好みません。物事を HTML に変換するのは少し難しいかもしれません。

取得できるのは、ブラウザが現在要素をどのように持っているかを表すことだけです。これは、HTML と同じではない可能性があります。たとえば、DOM で変更された属性は、元の HTML とは異なって表示されます。

プロセスは次のようになります。

var html = $(document.body)
    .clone() // get a copy of the element to work on
    .empty() // empty it
    .appendTo('<div/>').parent().html(); // equivalent to outerHTML

これにより、次のような結果が得られます。

'<body class="question-page"></body>'

その後、 final からすべてを削除できます<

html = html.substr(0,html.lastIndexOf('<'));

これにより、次のことが得られます。

'<body class="question-page">'
于 2013-10-31T20:46:38.790 に答える
2

解決しようとしている実際の問題を説明するコメントで提供された情報を考えると、bodyタグの属性を取得する必要はまったくなく、文字列検索を使用する必要もありません。ただ行う:

var $newContent = $('<div>' + data + '</div>').children();
$(document.body).empty().append($newContent);

つまり、データ全体を解析します。$(data)次に、すべての子ノードを取得し、それらを既存の に配置しますdocument.body

<div> + data + </div>$(html)単一の要素 (および子) を必要とし、標準の HTML ボイラープレートの を受け入れないため、が必要です<!DOCTYPE ...><html>...</html>。また、タグ<head><body>タグを取り除き、子だけを残すように見えます。私が作ったばかりのテストでは、与えられた

var data = '<!doctype html><html><head></head><body><span>Test</span>' +
           '<span>Test 2</span></body></html>'

それから

$('<div>' + data + '</div>').children()

2 つの<span>要素、つまりデータの<body>タグの目的のコンテンツのみを指定します。

編集OK -とタグが削除され、 の元の内容がそのまま残っているため、期待どおりに機能しないようです。<head><body><head>

代わりに、これを試してみてください。これは、元のテクニックとこれを組み合わせたものです。

var $newContent = $(data.substring(data.indexOf('<body')));
$(document.body).empty().append($newContent);
于 2013-10-31T20:50:21.107 に答える
1
<body id="mybody" class="someclass">
    blah blah...
</body>

必要なものを取得するには、これを使用します。

@lonesomeday が述べたように、すべてのブラウザーが outerHTML をサポートしているわけではないため、独自の実装を使用する必要があります。

jQuery.fn.outerHTML = function() {
    return $("<p>").append(this.eq(0).clone()).html();
};

そして、それを使用して、必要なものを受け取ります。

var html = $(document.body).outerHTML(),
    html = html.substr(0, html.indexOf('>')+1);

したがって、html変数には含まれています<body id="mybody" class="someclass">

于 2013-10-31T20:46:31.793 に答える