Как я делаю OuterHTML в Firefox?

XML таким образом универсален...

<DATA>
  <BINARY>
    <BIT index="0">0</BIT>
    <BIT index="1">0</BIT>
    <BIT index="2">1</BIT>
    ...
    <BIT index="n">1</BIT>
  </BINARY>
</DATA>

XML похож на насилие - Если это не решает Вашу проблему, Вы не используете достаточно его.

РЕДАКТИРОВАНИЕ:

BTW: Base64 + CDATA является, вероятно, лучшим решением

(EDIT2:
, Кто бы ни upmods я, также upmod реальный ответ. Мы не хотим, чтобы какая-либо плохая душа приехала сюда и на самом деле реализовала мой метод, потому что это было самое высокое, оцениваемое на Так, правильно?)

37
задан MatrixFrog 26 August 2010 в 22:15
поделиться

7 ответов

Разобрался!

child.getAttributeNode("OnClick").nodeValue;

getAttribute не работает,

0
ответ дан 27 November 2019 в 04:10
поделиться

Правильный подход (для браузеров, отличных от IE):

var sOuterHTML = new XMLSerializer().serializeToString(oElement);
19
ответ дан 27 November 2019 в 04:10
поделиться

Попробуйте следующее: http://snipplr.com/view/5460/outerhtml-in-firefox/ :

if (document.body.__defineGetter__) { 
   if (HTMLElement) {
      var element = HTMLElement.prototype;
      if (element.__defineGetter__) {
         element.__defineGetter__("outerHTML",
           function () {
              var parent = this.parentNode;
              var el = document.createElement(parent.tagName);
              el.appendChild(this);
              var shtml = el.innerHTML;
              parent.appendChild(this);
              return shtml;
           }
         );
      }
   }
}
2
ответ дан 27 November 2019 в 04:10
поделиться

Как насчет чего-то простого (не полностью протестированного):

function outerHTML(node) {
    var el;
    if (node.outerHTML) {
        return node.outerHTML;
    } else if (node.parentNode && node.parentNode.nodeType == 1) {
        var el = document.createElement(node.parentNode.nodeName);
        el.appendChild( node.cloneNode(true) );
        return el.innerHTML;
    }
    return "";
}
1
ответ дан 27 November 2019 в 04:10
поделиться

Если вам нужен только атрибут onclick, попробуйте следующее: Предполагается, что вы не установили событие с помощью attachEvent или addEventListener.

elm.getAttribute("onclick");

Если вы хотите создать внешнюю строку HTML ( просто пообещайте не разбирать его после того, как сделаете это):

function outerHTML(elm){
  var ret = "<"+elm.tagName;
  for(var i=0; i<elm.attributes.length; i++){
    var attr = elm.attributes[i];
    ret += " "+attr.name+"=\""+attr.nodeValue.replace(/"/, "\"")+"\"";
  }
  ret += ">";
  ret += elm.innerHTML+"</"+elm.tagName+">";
  return ret;
}

Эта функция должна помочь в большинстве случаев, но она не принимает во внимание пространства имен.

0
ответ дан 27 November 2019 в 04:10
поделиться

Поскольку W3C не включает свойство externalHTML, вы просто нужно добавить следующее:

if (typeof (HTMLElement) != "undefined" && !window.opera)  
{  
    HTMLElement.prototype._____defineGetter_____("outerHTML", function()  
    {  
        var a = this.attributes, str = "<" + this.tagName, i = 0; for (; i < a.length; i++)  
            if (a[i].specified)  
            str += " " + a[i].name + '="' + a[i].value + '"';  
        if (!this.canHaveChildren)  
            return str + " />";  
        return str + ">" + this.innerHTML + "</" + this.tagName + ">";  
    });  
    HTMLElement.prototype._____defineSetter_____("outerHTML", function(s)  
    {  
        var r = this.ownerDocument.createRange();  
        r.setStartBefore(this);  
        var df = r.createContextualFragment(s);  
        this.parentNode.replaceChild(df, this);  
        return s;  
    });  
    HTMLElement.prototype._____defineGetter_____("canHaveChildren", function()  
    {  
        return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());   
    });  
} 
2
ответ дан 27 November 2019 в 04:10
поделиться

Попробуйте:

(function(ele, html)
{if (typeof(ele.outerHTML)=='undefined')
    {var r=ele.ownerDocument.createRange();
     r.setStartBefore(ele);
     ele.parentNode.replaceChild(r.createContextualFragment(html), ele);
    }
 else
     {ele.outerHTML=html;
     }
})(aEle, aHtml);

для дийизма

1
ответ дан 27 November 2019 в 04:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: