这是我的第一个stackoverflow问题,所以尽量做好。 ;-D
我的问题是这个,我正在重构一些现有的javascript代码并使用jQuery来完成它。在一些地方,我遇到了类似于以下内容的javascript代码:
// some js code working with the customAttribute value
javascriptElementObject.customAttribue = void(0);
javascriptElementObject现在是一个jQuery对象,我一直在尝试使用以下代码来做同样的事情:
// some js code working with the customAttribute value
javascriptElementObject.attr("customAttribute", void(0));
然而,这似乎没有做任何事情。但是,以下代码有效:
javascriptElementObject.get(0).customAttribute = void(0);
我知道jQuery的removeAttr()函数,但到目前为止还没有使用它,因为我不知道它是否等同于将属性值设置为void(0)。
所以我猜这真的意味着我有两个问题:
感谢。
答案 0 :(得分:6)
jQuery喜欢重载它的方法:
obj.attr( name ) //retrieves the attribute value
obj.attr( name, value ) //sets the attribute
obj.attr( name, void(0) ) == obj.attr( name, null ) == obj.attr( name ) //i.e retrieving the attribute
如果要设置空属性
,可能需要尝试以下操作obj.attr( name, '' )
这也适用于其他方法jQuery.html()
,例如
答案 1 :(得分:2)
你想要完成什么?
如果目标是删除名称/值对中的值,您也可以完全删除该属性。我不知道维护一个没有价值的属性有任何内在价值;在不太符合标准的浏览器中,它甚至可能导致问题。
通常,$(selector).attr(name,value)和$(selector).removeAttr(name)的语法非常有效(至少我从未见过它失败。)
如果您尝试使用void(0)来阻止A HREF触发,那么最好使用“return false”作为这些A标记上的click事件。
答案 2 :(得分:2)
通过jQuery对象处理自定义属性的唯一方法是:
obj.get(0).myCustomAttr = 'some value';
这是因为jQuery的attr()方法将无法使用自定义属性(除非应用于XML文档)。
另请注意,meouw关于jQuery重载函数的答案并不完全正确,因为jQuery会检查传递给它的参数:
jQuery.funcname(param)
和
jQuery.funcname(param, null)
不同,因为null !== undefined
。例如:
var params_test = function(a) {
if (a === undefined) {
return 'called with no parameters';
} else {
return 'called with one parameter: ' + a;
}
};
params_test(); // results in 'called with no parameters'
params_test(null); // results in 'called with one parameter: null'
答案 3 :(得分:0)
javascriptElementObject.attr("customAttribute", void(0));
var _void = javascriptElementObject.attr("customAttribute");
alert(_void);