代码之家  ›  专栏  ›  技术社区  ›  Dan Rigby

jQuery 1.3-设置属性值的问题

  •  1
  • Dan Rigby  · 技术社区  · 17 年前

    这是我的第一个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. Are.get(0).customAttribue=void(0);以及.removeAtr(“customAttribute”);是否等效?

    谢谢。

    4 回复  |  直到 16 年前
        1
  •  6
  •   meouw    17 年前

    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
  •  2
  •   ScottyDont    17 年前

    你想完成什么?

    如果目标是删除名称/值对中的值,您也可以完全删除该属性。我不知道维护一个没有价值的属性有什么内在价值;在不太符合标准的浏览器中,它甚至可能会造成问题。

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

    如果你试图使用void(0)来防止A HREF发射,你最好在这些A标签上使用“return false”作为点击事件。

        3
  •  2
  •   Dimitar    17 年前

    通过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
  •  0
  •   Jaime Febres    17 年前

    嗯,试试这个:

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