更改标记名称但保留所有属性
我有这样的事情:
test
我想改成:
test
我有两个问题:
-
如何更改标签名称?
要么
-
如何复制所有属性?
这是一个非优雅但有效的解决方案:
// 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);
您应该使用要更改的HTMLElement
的outerHtml
。
通过这种方式,可以非常轻松地将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', ' ');