我有以下代码
<b class="xyzxterms" style="cursor: default; ">bryant keil bio</b>
如何在保留所有其他属性和信息的情况下将b
标记替换为h1
标记?
发布于 2013-03-22 02:05:41
@jakov和@Andrew Whitaker
这是一个进一步的改进,它可以一次处理多个元素。
$.fn.changeElementType = function(newType) {
var newElements = [];
$(this).each(function() {
var attrs = {};
$.each(this.attributes, function(idx, attr) {
attrs[attr.nodeName] = attr.nodeValue;
});
var newElement = $("<" + newType + "/>", attrs).append($(this).contents());
$(this).replaceWith(newElement);
newElements.push(newElement);
});
return $(newElements);
};
发布于 2015-12-01 23:37:44
@Jazzbo的回答返回了一个包含jQuery对象数组的jQuery对象,该对象是不可链接的。我对其进行了更改,使其返回的对象更类似于$.each返回的对象:
$.fn.changeElementType = function (newType) {
var newElements,
attrs,
newElement;
this.each(function () {
attrs = {};
$.each(this.attributes, function () {
attrs[this.nodeName] = this.nodeValue;
});
newElement = $("<" + newType + "/>", attrs).append($(this).contents());
$(this).replaceWith(newElement);
if (!newElements) {
newElements = newElement;
} else {
$.merge(newElements, newElement);
}
});
return $(newElements);
};
(还进行了一些代码清理,以便通过jslint。)
发布于 2012-07-13 02:55:39
@Andrew Whitaker:我提出这样的改变:
$.fn.changeElementType = function(newType) {
var attrs = {};
$.each(this[0].attributes, function(idx, attr) {
attrs[attr.nodeName] = attr.nodeValue;
});
var newelement = $("<" + newType + "/>", attrs).append($(this).contents());
this.replaceWith(newelement);
return newelement;
};
然后,您可以执行以下操作:$('<div>blah</div>').changeElementType('pre').addClass('myclass');
https://stackoverflow.com/questions/8584098
复制相似问题