Javascript:ノード(要素またはドキュメント)のDOM表現があり、その文字列表現を探しています。例えば。、
var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));
生じるはずです:
get_string(el) == "<p>Test</p>";
私は些細な単純なものを見逃しているという強い気持ちを持っていますが、IE、FF、Safari、Operaで機能する方法を見つけられません。したがって、outerHTMLはオプションではありません。
一時的な親ノードを作成し、その内部HTMLコンテンツを取得できます。
var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));
var tmp = document.createElement("div");
tmp.appendChild(el);
console.log(tmp.innerHTML); // <p>Test</p>
編集: outerHTMLについては以下の回答をご覧ください。 el.outerHTMLだけが必要です。
探しているのは「outerHTML」ですが、古いブラウザとの互換性がないフォールバックcozが必要です。
var getString = (function() {
var DIV = document.createElement("div");
if ('outerHTML' in DIV)
return function(node) {
return node.outerHTML;
};
return function(node) {
var div = DIV.cloneNode();
div.appendChild(node.cloneNode(true));
return div.innerHTML;
};
})();
// getString(el) == "<p>Test</p>"
ここに私のjQueryプラグインがあります: 選択した要素の外側のHTMLを取得します
これには複雑なスクリプトは必要ないと思います。ただ使う
get_string=(el)=>el.outerHTML;
FFでは、XMLSerializer
オブジェクトを使用してXMLを文字列にシリアル化できます。 IEは、ノードのxml
プロパティを提供します。したがって、次のことができます。
function xml2string(node) {
if (typeof(XMLSerializer) !== 'undefined') {
var serializer = new XMLSerializer();
return serializer.serializeToString(node);
} else if (node.xml) {
return node.xml;
}
}
Element#outerHTMLを使用:
var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));
console.log(el.outerHTML);
また、DOM要素の記述にも使用できます。 Mozillaのドキュメントから:
要素DOMインターフェースのouterHTML属性は、その子孫を含む要素を記述するシリアル化されたHTMLフラグメントを取得します。指定された文字列から解析されたノードで要素を置き換えるように設定できます。
https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML
Element.outerHTMLを使用して、外部タグと属性を含む要素の完全な表現を取得します。
要素に親がある場合
element.parentElement.innerHTML
試して
new XMLSerializer().serializeToString(element);
私のユースケースでは、outerHTML全体が常に必要なわけではないことがわかりました。多くのノードには、表示する子が多すぎます。
関数は次のとおりです(Chromeで最低限テスト済み):
/**
* Stringifies a DOM node.
* @param {Object} el - A DOM node.
* @param {Number} truncate - How much to truncate innerHTML of element.
* @returns {String} - A stringified node with attributes
* retained.
*/
function stringifyEl(el, truncate) {
var truncateLen = truncate || 50;
var outerHTML = el.outerHTML;
var ret = outerHTML;
ret = ret.substring(0, truncateLen);
// If we've truncated, add an elipsis.
if (outerHTML.length > truncateLen) {
ret += "...";
}
return ret;
}
https://Gist.github.com/kahunacohen/467f5cc259b5d4a85eb201518dcb15ec
受け入れられた回答のコードを使用してDOMElementsを反復処理すると、何が間違っているのかを理解するのに多くの時間を無駄にしました。これは私のために働いたものです、そうでなければ、ドキュメントからすべての2番目の要素が消えます:
_getGpxString: function(node) {
clone = node.cloneNode(true);
var tmp = document.createElement("div");
tmp.appendChild(clone);
return tmp.innerHTML;
},