获取包含属性的开始标记 – outerHTML,不带innerHTML
我想从DOM中检索某个带有其属性的标记元素。 例如,来自
link text
我希望 ,可选择关闭
,作为字符串或其他对象。 在我看来,这类似于在没有
.innerHTML
情况下检索.outerHTML
。
最后,我需要通过jQuery包装其他一些元素。 我试过了
var elem = $('#some-element').get(0); $('#some-other-element').wrap(elem);
但.get()
返回包含其内容的DOM元素。 也
var elem = $('#some-element').get(0); $('#some-other-element').wrap(elem.tagName).parent().attr(elem.attributes);
失败,因为elem.attributes
返回一个不能与jQuery的attr()
一起使用的NamedNodeMap
,我无法转换它。 承认上述示例不是很有意义,因为它们还复制了元素的不再唯一ID。 但有什么简单的方法吗? 非常感谢。
var wrapper = $('.class').clone().attr('id','').empty();
对于未来的Google员工,有一种方法可以在没有jQuery的情况下执行此操作:
tag = elem.outerHTML.slice(0, elem.outerHTML.indexOf(elem.innerHTML));
由于outerHTML
包含开头标记,后跟innerHTML
包含的镜像,我们可以将outerHTML从0(开始标记的开头)子串到innerHTML开始的位置(开始标记的结尾),因为innerHTML是outerHTML的镜像。 ,除了开头标签,只剩下开头标签!
这个适用于
标签, 标签和其他空标签:
tag = elem.innerHTML ? elem.outerHTML.slice(0,elem.outerHTML.indexOf(elem.innerHTML)) : elem.outerHTML;
因为innerHTML在自闭标签中是空的,并且indexOf('')
总是返回0,所以上述修改首先检查innerHTML
的存在。
这是我的解决方案:
opentag=elem.outerHTML.slice(0, elem.outerHTML.length-elem.innerHTML.length-elem.tagName.length-3);