更改标记名称但保留所有属性

我有这样的事情:

test 

我想改成:

 test 

我有两个问题:

  1. 如何更改标签名称?

    要么

  2. 如何复制所有属性?

这是一个非优雅但有效的解决方案:

 // create a new  element new_element = $(""); // iterate over every attribute of the #some_id span element $.each($("#some_id").get(0).attributes, function(i, attrib) { // set each attribute to the specific value $(new_element).attr(attrib.name, attrib.value); }); // carry over the html content new_element.html($("#some_id").html()); // finally, swap the elements $("#some_id").replaceWith(new_element); 

您应该使用要更改的HTMLElementouterHtml

通过这种方式,可以非常轻松地将span更改为nchor:我们只需将^替换为$替换为 。 使用正则表达式仅更改开始和结束标记的第一个和最后一个匹配项,我们保留原始属性。

代码在这里:

 var newElement = $('a-selector').get(0).outerHTML.replace(/^$/, ""); $('a-selector').replaceWith(newElement); 

这个例子使用jQuery。 请参考这个小提琴看它是否正常工作。

你到底想要实现的目标是什么? 如果它只是样式,那么使用CSS会更好。 如果您希望某些内容成为可点击链接(或链接变为不可点击),则只需删除href属性即可。

我不打算对它进行编码,而是为了引导您朝着正确的方向前进,查找如何在jquery中构建标记(类似于http://api.jquery.com/append/ )

然后循环遍历每个标记,例如使用jQuery迭代元素属性 ,并将每个属性添加到附加标记。

编辑:很好,这是一个例子: http : //jsfiddle.net/mazzzzz/xUUn3/

这是我用来替换jquery中的html标签的方法:

 // Iterate over each element and replace the tag while maintaining attributes $('span#anId').each(function() { // Create a new element and assign it attributes from the current element var NewElement = $(""); $.each(this.attributes, function(i, attrib){ $(NewElement).attr(attrib.name, attrib.value); }); // Replace the current element with the new one and carry over the contents $(this).replaceWith(function () { return $(NewElement).append($(this).contents()); }); }); 

我在第一行使用的each函数在这种情况下都是不必要的,因为我们只按id选择单个项目。 我仍然更喜欢在这里使用each ,因为这将允许相同的代码循环使用特定类的所有项目。

您可以将此代码与jQuery一起使用:

 function replaceElementTag(targetSelector, newTagString) { $(targetSelector).each(function(){ var newElem = $(newTagString, {html: $(this).html()}); $.each(this.attributes, function() { newElem.attr(this.name, this.value); }); $(this).replaceWith(newElem); }); } 

示例用法:

 replaceElementTag('img', '');