118

Javascript: ノード (要素またはドキュメント) の DOM 表現があり、その文字列表現を探しています。例えば、

var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));

次の結果が得られます。

get_string(el) == "<p>Test</p>";

単純なものが欠けていると強く感じていますが、IE、FF、Safari、Opera で機能する方法が見つかりません。したがって、outerHTML はオプションではありません。

4

12 に答える 12

149

一時的な親ノードを作成し、その内部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が必要なすべてである必要があります。

于 2009-11-17T18:33:27.477 に答える
53

探しているのは「outerHTML」ですが、古いブラウザと互換性がないため、フォールバックが必要です。

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 プラグインがあります: Get selected element's outer HTML

于 2013-11-19T17:53:49.253 に答える
25

これには複雑なスクリプトは必要ないと思います。使うだけ

get_string=(el)=>el.outerHTML;
于 2016-03-10T10:13:49.580 に答える
18

FF では、オブジェクトを使用してXMLSerializerXML を文字列にシリアル化できます。IE はxmlノードのプロパティを提供します。したがって、次のことができます。

function xml2string(node) {
   if (typeof(XMLSerializer) !== 'undefined') {
      var serializer = new XMLSerializer();
      return serializer.serializeToString(node);
   } else if (node.xml) {
      return node.xml;
   }
}
于 2009-11-17T18:38:16.250 に答える
5

試す

new XMLSerializer().serializeToString(element);
于 2018-10-05T16:12:10.440 に答える
2

If your element has parent

element.parentElement.innerHTML
于 2015-01-02T12:51:37.093 に答える
0

受け入れられた回答のコードを使用してDOMElementsを反復処理すると、何が問題なのかを理解するのに多くの時間を無駄にしました。これは私にとってはうまくいきました。そうでなければ、ドキュメントからすべての要素が消えます:

_getGpxString: function(node) {
          clone = node.cloneNode(true);
          var tmp = document.createElement("div");
          tmp.appendChild(clone);
          return tmp.innerHTML;
        },
于 2014-05-02T19:58:34.520 に答える