• jQuery 1.6+ 中attr()与prop() 区别


        最近在写一个关于checkbox全选与取消全选的优化方法时,看到很多高手用到了.prop()。
        于是在jquery的帮助文档查了一下,才知道这是在jquery 1.6.1中新加的方法,用来设置属性。但已经有了attr(),为何还要加入prop()呢?于是查阅了一下相关文档,总结一下。
    下面主要写一下它们在何种情况下被使用: 一、checked,selected,readonly和disabled在1.6.1中和1.6之前的处理相同,也就是说还是直接用attr()即可,如
              $(“:checkbox”).attr(“checked”, true);
              $(“option”).attr(“selected”, true);
              $(“input”).attr(“readonly”, true);
              $(“input”).attr(“disabled”, true);
        甚至是这样的代码:
     
              if ( $(“:checkbox”).attr(“checked”) ) { /* Do something */
        都是可以在1.6以上的jquery中正常运行的,但有一些bug,在下面讲到。
    
       二、下面的.attr()的例子,虽然在jQuery 1.61之前的版本中能正常工作,但是现在必须使用.prop()方法代替:
         
    1                 .attr                                     .prop
    2         $(window).attr()                             $(window).prop()
    3         $(document).attr()                           $(document).prop()
    4         $(':checkbox').attr('checked',true)          $(':checkbox').prop('checked',true)
    5         $('option').attr('selected',true)            $('option').prop('selected',true)

      首先,window或document中使用.attr()方法在jQuery1.6中不能正常运行,因为window和document中不能有attributes。它们包含properties(比如:location或readyState),必须使用.prop()方法操作或简单地使用javascript原生的方法。 在jQuery1.6.1中,window和document中使用.attr()将被自动转成使用.prop(还没试过)。其次,checked,selected和前面提到的其它boolean attributes,因为这些attributes和其相应的properties之间的特殊关系而被特殊对待。通常,attribute 就是以下html代码中看到的,如:
                  <input type=”checkbox” checked=”checked”>
    但它仅表示checked属性在页面加载的时候被设置成默认值或初始值,而不管checkbox元素是否被选中。 而通常 properties 是一个浏览器用来记录当前属性值的东西。正常情况下,properties反映它们相应的attributes。
    所以,当用户点击一个checkbox元素或选中一个select元素的一个option时,使得properties保持最新,但对应的attributes却不一定,它仅被浏览器用来保存该属性的初始值。
    在jQuery1.6中,如果使用下面的方法设置checked:
                  $(“:checkbox”).attr(“checked”, true);
    将不会检查checkbox元素,因为它是用来设置属性的,但是设置的都是初始值。
    综合,我觉得,在设置这些prioerties时,使用prop(),而在获取初始化的值是使用attr()。
    下面是jQuery1.6.1支持的使用.attr()动态地取得和设置boolean attributes/properties的完整列表:

    autofocus, autoplay, async, checked, controls, defer, disabled, hidden, loop, multiple, open, readonly, required, scoped, selected

    当然,代码仍然可以在jQuery1.6.1中正常运行,还是建议使用.prop()方法来设置这些boolean attributes/properties.
    -------------------------------------------------------------------------------关 于 我-----------------------------------------------------------------
    本人菜鸟一枚,平凡而普通,成为一名程序猿,为生活而努力,为理想而积累。
    爱好编程,喜欢钻研。
    目前供职TDX,专职前端开发。
    可以点此找到我
  • 相关阅读:
    烧写NAND Flash时出现错误:*** Warning bad CRC or NAND, using default environment
    在ubuntu下如何验证文件的MD5码
    条件编译#ifdef MACRO_A和#if defined(MACRO_A)的区别
    用nmap获取ip和mac地址
    rcS中启动udevd
    ubuntu下minicom不能接受键盘输入
    ios audioqueue 流播放接口
    ffmpeg 0.8.11 VC编译的SDK已经发布
    lua 字符串数学表达式运算
    ffmpeg 0.8.11 VC编译的SDK已经发布
  • 原文地址:https://www.cnblogs.com/wsun/p/3908023.html
Copyright © 2020-2023  润新知