【问题标题】:jQuery 1.3 - Issue with Setting an Attribute ValuejQuery 1.3 - 设置属性值的问题
【发布时间】:2009-01-14 22:06:15
【问题描述】:

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

谢谢。

【问题讨论】:

  • customAttribue 和 customAttribute 有区别吗?还是只是一个错字?
  • 这是一个错字,已修正。

标签: javascript jquery attributes


【解决方案1】:

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

【讨论】:

  • 有点晚了,但我刚刚注意到没有值的属性,例如
【解决方案2】:

你想完成什么?

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

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

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

【讨论】:

  • 部分问题在于我正在重构现有代码,因此我无法确定将属性值设置为 void(0) 的目的。在之后的调试中,在将属性值设置为 void(0) 后访问它会产生未定义的结果,因此 .removeAttr() 应该可以工作。
【解决方案3】:

通过 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'

【讨论】:

    【解决方案4】:

    嗯,试试这个:

    javascriptElementObject.attr("customAttribute", void(0));
    var _void = javascriptElementObject.attr("customAttribute");
    alert(_void);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多