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 реальный ответ. Мы не хотим, чтобы какая-либо плохая душа приехала сюда и на самом деле реализовала мой метод, потому что это было самое высокое, оцениваемое на Так, правильно?)
Разобрался!
child.getAttributeNode("OnClick").nodeValue;
getAttribute не работает,
Правильный подход (для браузеров, отличных от IE):
var sOuterHTML = new XMLSerializer().serializeToString(oElement);
Попробуйте следующее: 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;
}
);
}
}
}
Как насчет чего-то простого (не полностью протестированного):
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 "";
}
Если вам нужен только атрибут 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;
}
Эта функция должна помочь в большинстве случаев, но она не принимает во внимание пространства имен.
Поскольку 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());
});
}
Попробуйте:
(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);
для дийизма