Как преобразовать HTMLElement в строку
Я собираюсь создать xml-элемент в javascript для обмена данными с серверной стороной. Я обнаружил, что могу сделать это с помощью документа.метод createElement.Но я не знаю, как преобразовать его в строку. Есть ли API в браузере, чтобы сделать его проще? Или есть ли JS lib, включающий этот API?
спасибо заранее.
//модификации
Я обнаружил, что браузер API XMLSerializer, это должен быть правильный способ сериализации в строку.
5 ответов:
вы можете получить "внешний html" путем клонирования элемента, добавление его в пустой, "за кулисами" контейнер, и значение innerHTML будет в контейнере.
в этом примере используется необязательный второй параметр.
документ назвать.getHTML (element, true) для включения потомков элемента.
document.getHTML= function(who, deep){ if(!who || !who.tagName) return ''; var txt, ax, el= document.createElement("div"); el.appendChild(who.cloneNode(false)); txt= el.innerHTML; if(deep){ ax= txt.indexOf('>')+1; txt= txt.substring(0, ax)+who.innerHTML+ txt.substring(ax); } el= null; return txt; }
элемент
outerHTML
собственность (Примечание: поддерживается Firefox после Версии 11) возвращает HTML всего элемента.пример
<div id="new-element-1">Hello world.</div> <script type="text/javascript"><!-- var element = document.getElementById("new-element-1"); var elementHtml = element.outerHTML; // <div id="new-element-1">Hello world.</div> --></script>
аналогично, вы можете использовать
innerHTML
чтобы получить HTML, содержащийся в данном элементе, илиinnerText
чтобы получить текст внутри элемента (без HTML разметки).См. Также
самый простой способ сделать это скопировать innerHTML этого элемента в переменную tmp и сделать его пустым, затем добавить новый элемент, а затем скопировать обратно переменную tmp к нему. Вот пример, который я использовал, чтобы добавить скрипт jquery в верхнюю часть головы.
var imported = document.createElement('script'); imported.src = 'http://code.jquery.com/jquery-1.7.1.js'; var tmpHead = document.head.innerHTML; document.head.innerHTML = ""; document.head.append(imported); document.head.innerHTML += tmpHead;
так просто :)
здесь
tagName
собственность, аattributes
свойства:var element = document.getElementById("wtv"); var openTag = "<"+element.tagName; for (var i = 0; i < element.attributes.length; i++) { var attrib = element.attributes[i]; openTag += " "+attrib.name + "=" + attrib.value; } openTag += ">"; alert(openTag);
см. также как перебирать все атрибуты в HTML-элементе? (Я сделал!)
чтобы получить содержимое между открытыми и закрытыми тегами, вы, вероятно, можете использовать
innerHTML
если вы не хотите перебирать все дочерние элементы...alert(element.innerHTML);
... а потом снова закрыть тег
tagName
.var closeTag = "</"+element.tagName+">"; alert(closeTag);
это может не относиться к каждому случаю, но при извлечении из xml у меня была эта проблема, которую я решил с помощью этого.
function grab_xml(what){ var return_xml =null; $.ajax({ type: "GET", url: what, success:function(xml){return_xml =xml;}, async: false }); return(return_xml); }
затем получить xml:
var sector_xml=grab_xml("p/sector.xml"); var tt=$(sector_xml).find("pt");
затем Затем я сделал эту функцию для извлечения строки xml, когда мне нужно прочитать из XML-файла, содержащего HTML-теги.
function extract_xml_line(who){ var tmp = document.createElement("div"); tmp.appendChild(who[0]); var tmp=$(tmp.innerHTML).html(); return(tmp); }
а теперь вывод:
var str_of_html= extract_xml_line(tt.find("intro")); //outputs the intro tag and whats inside it: helllo <b>in bold</b>