Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 给定DOM对象的渲染字符串,是否有方法创建DOM对象?_Javascript_Html - Fatal编程技术网

Javascript 给定DOM对象的渲染字符串,是否有方法创建DOM对象?

Javascript 给定DOM对象的渲染字符串,是否有方法创建DOM对象?,javascript,html,Javascript,Html,是否有一种方法可以从整个字符串而不仅仅是innerHTML创建DOM对象?我有一个完整呈现DOM形式的字符串: <some_tag_name class=... id=...>inner text</some_tag_name> (1) 但是当我这样做时,我必须从我拥有的字符串(1)中提取innerhtml部分,分析标记类型和所有属性,并分别将其分配给e。我想简单地从(1)形式的字符串中完成这一切 编辑 我按照答案做了,但这比一开始看起来要复杂得多。问题是,当您

是否有一种方法可以从整个字符串而不仅仅是innerHTML创建DOM对象?我有一个完整呈现DOM形式的字符串:

<some_tag_name class=... id=...>inner text</some_tag_name>     (1)
但是当我这样做时,我必须从我拥有的字符串(1)中提取innerhtml部分,分析标记类型和所有属性,并分别将其分配给
e
。我想简单地从(1)形式的字符串中完成这一切

编辑

我按照答案做了,但这比一开始看起来要复杂得多。问题是,当您有一个表示
tr
td
等内容的字符串,并试图将其作为内部HTML添加到临时创建的
div
,浏览器会自动在其外部添加额外的标记。下面是我解决这个问题的方法,其中
c
是字符串,
e
是创建的元素:

var cTagName = c.match(new RegExp('[a-zA-Z]+'))[0].toUpperCase();
var e = document.createElement("div");
    e.innerHTML = c;
    e = e.children[0];
//// When the type of `e' does not match what `c' expects, the browser
////    automatically modifies the type of c. The following is to undo this.
if(e.tagName.toUpperCase() != cTagName){
    e = document.createElement("table");
    e.innerHTML = c;
    e = e.children[0];
};
if(e.tagName.toUpperCase() != cTagName){
    e = document.createElement("tbody");
    e.innerHTML = c;
    e = e.children[0];
};
if(e.tagName.toUpperCase() != cTagName){
    e = document.createElement("tr");
    e.innerHTML = c;
    e = e.children[0];
};
你在找房子

var el = document.createElement('tag');
document.body.appendChild(el); // The element must be appended to the DOM before
                               // setting outerHTML.  Otherwise, it will throw a
                               // NO_MODIFICATION_ALLOWED_ERR.
el.outerHTML='<some_tag_name class=... id=...>inner text</some_tag_name>';
您可以随时执行以下操作:

var div = document.createElement("div");
div.innerHTML = "<some> ... </some>"
var e = div.children[0];
var div=document.createElement(“div”);
div.innerHTML=“…”
var e=分区子项[0];
(或者,如果您使用的是jQuery,只需使用
$(“”)[0]
)。

您可以使用:

var myDiv=$('This is my div!');

不确定您想用它做什么,但您可以创建一个div元素,将innerHTML设置为字符串,并从您创建的元素中取出子元素。或者,总是有jQuery,它实际上只是在后台做同样的事情。请注意,Firefox直到第11版才支持它。值得一提的是,Firefox最近才添加了对
outerHTML
的支持(2012年3月第11版),尽管大多数其他浏览器已经支持它很长时间了。所以现在这不是一个真正的跨浏览器解决方案。(编辑:Ninjad by@Rob,因为我必须去开门:-P)谢谢,过一会儿你就会成为最好的解决方案。现在,我将采用本的解决方案。@Rob,Andy:谢谢,我不知道。这是一个有点可笑的,它需要修复…谢谢。你的回答似乎有力。我想知道josh3736的答案和你的答案之间的区别。两者看起来都不错。这样做之后,有没有一种方法可以删除原始的“div”元素
e
,而不破坏
div.children[0]
?我将经常使用它,在稍后的随机点上,
div.children[0]
对象将被完全删除。恐怕会有很多这样的空“div”存在。它们会被垃圾收集吗?是的,它们会被自动垃圾收集。谢谢你的帮助。我试过你的方法,事实上,有一个问题。正如我在问题的编辑中所展示的那样,我克服了这个问题。你有什么想法吗;好还是坏?是的,我想你确实需要做那种事。顺便说一下,jQuery可以为您处理所有这些。遗憾的是,我没有使用jQuery。。。注意,jQuery只是创建一个包装器
div
,并设置它的
innerHTML
var el = document.createElement('div');
el.innerHTML = '<some_tag_name class=... id=...>inner text</some_tag_name>';
var div = document.createElement("div");
div.innerHTML = "<some> ... </some>"
var e = div.children[0];
var myDiv = $('<div class="my-div">This is my div!</div>');