1

这是我的第一个 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); 等效?

谢谢。

4

4 回答 4

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(),例如

于 2009-01-14T22:37:01.343 回答
2

你想达到什么目的?

如果目标是删除名称/值对中的值,您不妨完全删除该属性。我不知道维护没有价值的属性有任何内在价值。在不太符合标准的浏览器中,它甚至可能导致问题。

一般来说,$(selector).attr(name, value) 和 $(selector).removeAttr(name) 的语法工作得很好(至少我从未见过它失败。)

如果您尝试使用 void(0) 来防止触发 A HREF,那么最好使用“return false”作为这些 A 标签上的点击事件。

于 2009-01-14T22:20:57.493 回答
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'
于 2009-03-09T16:31:14.977 回答
0

嗯,试试这个:

javascriptElementObject.attr("customAttribute", void(0));
var _void = javascriptElementObject.attr("customAttribute");
alert(_void);
于 2009-01-14T22:22:29.283 回答