获取包含属性的开始标记 – 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(); 
  • 您可能希望更改选择器以更精确地匹配您正在寻找的元素。
  • clone()创建匹配元素的新副本,也可以选择复制事件处理程序。
  • 我使用attr来清除元素的ID,这样我们就不会重复ID。
  • empty()删除所有子节点(’ innerHTML ‘)。

对于未来的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);