jQuery 1.3 - 设置属性值的问题

时间:2009-01-14 22:06:15

标签: javascript jquery attributes

这是我的第一个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)。

所以我猜这真的意味着我有两个问题:

  1. 为什么第一个jQuery版本不起作用?
  2. 是.get(0).customAttribue = void(0);和.removeAttr(“customAttribute);等效?
  3. 感谢。

4 个答案:

答案 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);