Change the tag but keep the attributes and content -- jQuery/Javascript
Here is a method I use to replace html tags in jquery:
// Iterate over each element and replace the tag while maintaining attributes
$('a').each(function() {
// Create a new element and assign it attributes from the current element
var NewElement = $("<p />");
$.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());
});
});
I would also typically restrict it to a specific class, such as $('a.class1').each(function()
for the example above.
hacky that do the trick
var p = $('a').wrapAll('<div class="replace"></div>');
var a = $('div').map(function(){
return this.innerHTML;
}).get().join(' ');
$('div.replace').html(a.replace(/<a/g,'<p').replace(/a>/g,'p>'));
demo
It's better to create jQuery plugin for future re-usability:
(function (a) {
a.fn.replaceTagName = function (f) {
var g = [],
h = this.length;
while (h--) {
var k = document.createElement(f),
b = this[h],
d = b.attributes;
for (var c = d.length - 1; c >= 0; c--) {
var j = d[c];
k.setAttribute(j.name, j.value)
}
k.innerHTML = b.innerHTML;
a(b).after(k).remove();
g[h - 1] = k
}
return a(g)
}
})(window.jQuery);
Usage:
// Replace given object tag's name
$('a').replaceTagName("p");
Example: JSFiddle
Here is a more generic method:
// New type of the tag
var replacementTag = 'p';
// Replace all a tags with the type of replacementTag
$('a').each(function() {
var outer = this.outerHTML;
// Replace opening tag
var regex = new RegExp('<' + this.tagName, 'i');
var newTag = outer.replace(regex, '<' + replacementTag);
// Replace closing tag
regex = new RegExp('</' + this.tagName, 'i');
newTag = newTag.replace(regex, '</' + replacementTag);
$(this).replaceWith(newTag);
});
You can try the code here: http://jsfiddle.net/tTAJM/