获取 DOM 节点的字符串表示形式
Javascript:我有一个节点(元素或文档)的 DOM 表示,我正在寻找它的字符串表示。例如,
var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));
应该产生:
get_string(el) == "<p>Test</p>";
我有一种强烈的感觉,我错过了一些简单的东西,但我只是找不到一种适用于 IE、FF、Safari 和 Opera 的方法。因此,outerHTML 不是一个选择。
Javascript: I have the DOM representation of a node (element or document) and I'm looking for the string representation of it. E.g.,
var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));
should yield:
get_string(el) == "<p>Test</p>";
I have the strong feeling, that I'm missing something trivially simple, but I just don't find a method that works in IE, FF, Safari and Opera. Therefore, outerHTML is no option.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(13)
您可以创建一个临时父节点,并获取其innerHTML内容:
编辑:
请参阅下面有关outerHTML 的答案。 el.outerHTML 应该就是所需要的。
You can create a temporary parent node, and get the innerHTML content of it:
EDIT:
Please see answer below about outerHTML. el.outerHTML should be all that is needed.
您正在寻找的是“outerHTML”,但我们需要一个后备,因为它与旧浏览器不兼容。
您可以在这里找到我的 jQuery 插件:获取所选元素的外部 HTML
What you're looking for is 'outerHTML', but we need a fallback because it's not compatible with old browsers.
You'll find my jQuery plugin here: Get selected element's outer HTML
我认为您不需要任何复杂的脚本。只需使用
I dont think you need any complicated script for this. Just use
在 FF 下,您可以使用
XMLSerializer
对象将 XML 序列化为字符串。 IE 为您提供节点的xml
属性。因此您可以执行以下操作:Under FF you can use the
XMLSerializer
object to serialize XML into a string. IE gives you anxml
property of a node. So you can do the following:使用Element#outerHTML:
它也可以用来编写DOM元素。来自 Mozilla 的文档:
https://developer.mozilla.org/en-US/docs /Web/API/Element/outerHTML
Use Element#outerHTML:
It can also be used to write DOM elements. From Mozilla's documentation:
https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML
尝试
Try
您可以简单地在元素上使用 outerHTML 属性。它会返回你想要的。
让我们创建一个名为
get_string(element)
的函数You can simply use outerHTML property over the element. It will return what you desire.
Let's create a function named
get_string(element)
使用 element.outerHTML 获取元素的完整表示,包括外部标签和属性。
Use element.outerHTML to get full representation of element, including outer tags and attributes.
如果你的元素有父元素
If your element has parent
我发现对于我的用例,我并不总是需要整个outerHTML。许多节点有太多的子节点无法显示。
这是一个函数(在 Chrome 中进行了最低限度的测试):
https://gist.github.com/kahunacohen/467f5cc259b5d4a85eb201518dcb15ec< /a>
I've found that for my use-cases I don't always want the entire outerHTML. Many nodes just have too many children to show.
Here's a function (minimally tested in Chrome):
https://gist.github.com/kahunacohen/467f5cc259b5d4a85eb201518dcb15ec
当我使用接受的答案中的代码迭代 DOMElements 时,我浪费了很多时间来找出问题所在。这对我有用,否则每隔一个元素就会从文档中消失:
I have wasted a lot of time figuring out what is wrong when I iterate through DOMElements with the code in the accepted answer. This is what worked for me, otherwise every second element disappears from the document:
虽然
outerHTML
通常是答案,但对于Attr
和Text
(Node
接口的子类),有其他属性:请参阅 https://developer.mozilla.org/en- US/docs/Web/API/Node 用于更多类型的节点,例如
DocumentFragment
和Comment
While
outerHTML
is usually the answer, forAttr
andText
(Child classes of theNode
interface), there are other properties:See https://developer.mozilla.org/en-US/docs/Web/API/Node for more types of Nodes such as
DocumentFragment
andComment
如果使用反应:
if using react: