我有这个函数可以改变我无法控制的某些标记的元素。它一直很好用,但在某些页面上 - 没有该名称的元素。我的JS全部编译成一个文件 - 所以在没有匹配的页面上,我得到一个error: Uncaught TypeError: Cannot read property 'attributes' of undefined
(function($) {
$.fn.changeElementType = function(newType) {
// create object to store attributes
var attrs = {};
// save out the values to that object
$.each(this[0].attributes, function(idx, attr) {
attrs[attr.nodeName] = attr.nodeValue;
});
// replace the element itself - and put the original values back
this.replaceWith(function() {
return $("<" + newType + "/>", attrs).append($(this).contents());
});
};
})(jQuery);
(例如,这应该是一个列表,而不仅仅是吨的div)
$('.list-view').changeElementType('ul');
所以我的直觉就是放一个if
语句或其他东西,这样如果没有匹配 - 它就不会妨碍它。 - 但我不确定要采取什么方向。
我以前几乎都使用函数表达式,所以我认为这就是为什么我从来没有真正需要处理这个问题。
答案 0 :(得分:1)
如果我正确地阅读了你的问题,你可以在没有匹配的情况下返回。如果this.length
为0
,则会发生这种情况。例如,您可以将代码更改为以下内容:
(function($) {
$.fn.changeElementType = function(newType) {
// If there is no match, return
if (this.length === 0) return;
// create object to store attributes
var attrs = {};
// save out the values to that object
$.each(this[0].attributes, function(idx, attr) {
attrs[attr.nodeName] = attr.nodeValue;
});
// replace the element itself - and put the original values back
this.replaceWith(function() {
return $("<" + newType + "/>", attrs).append($(this).contents());
});
};
})(jQuery);