jQuery 特性操作详解及实例代码

  每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息。操作特性的DOM方法主要有3个:getAttribute()方法、setAttribute()方法和removeAttribute()方法,而在jQuery中用一个attr()与removeAttr()就可以全部搞定了,包括兼容问题。本文将介绍jQuery中的特性操作

获取特性

  jQuery中用attr()方法来获取和设置特性,attr是attribute(特性)的缩写,在jQuery DOM操作中会经常用到attr()方法

attr(attributeName)

  attr(传入特性名):获取特性的值,相当于DOM中的getAttribute()

<div></div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script> console.log(test.getAttribute('id'));//'test' console.log($('#test').attr('id'));//'test' </script>

  [注意]attr()方法只获取第一个匹配元素的属性值。要获取每个单独的元素的属性值,我们依靠jQuery的.each()或者.map()方法循环

<div>元素一</div> <div>元素二</div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script> console.log($('.test').attr('id'));//'test' $('.test').each(function(index) { console.log(index+":"+$(this).attr('id'));//'1:ele1 2:ele2' }); </script>

prop()

  属性(property)和特性(attribute)是不同的。属性是DOM节点的属性,而特性是HTML标签的特性

  [注意]关于属性和特性的区别的详细信息移步至此

<div data="abc"></div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script> test.data = 123; //IE8-浏览器返回123,其他浏览器返回'abc' console.log(test.getAttribute('data')) console.log(test.data)//123 //IE8-浏览器返回123,其他浏览器返回'abc' console.log($('#test').attr('data')) console.log($('#test').prop('data'))//123 </script>

  由上面代码可知,jQuery并没有解决低版本IE浏览器属性和特性混淆的问题

设置特性

  设置特性虽然依然使用attr()方法,但却有3种方式

【1】attr(attributeName,value)

  attr(特性名, 特性值):设置特性的值,相当于DOM中的setAttribute()

<div></div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script> test.setAttribute('title','abc'); console.log(test.getAttribute('title'))//'abc' $('#test').attr('title','123'); console.log($('#test').attr('title'));//'123' </script>

  jQuery禁止改变一个<input>或<button>元素的type特性,会静默失败。因为IE8-不会允许改变<input>或者<button>元素的type特性,静默失败

<input type="text"> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script> test.setAttribute('type','button'); $('#test').attr('type','button'); </script>

【2】attr(attributes)

  attr(attributes):给指定元素设置多个特性值,即{特性名一: “特性值一”,特性名二:“特性值二”,…}

  当设置多个特性,包裹特性名的引号是可选的

<div></div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script> test.setAttribute('title','abc'); test.setAttribute('a','abc'); console.log(test.getAttribute('title'))//'abc' console.log(test.getAttribute('a'))//'abc' $('#test').attr({ title: '123', a: '123' }); console.log($('#test').attr('title'));//'123' console.log($('#test').attr('a'));//'123' </script>

  [注意]设置样式名“class”特性时,必须使用引号。否则IE8-浏览器下会报错

<div></div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script> $('#test').attr({ class: 'test' }); //IE8-浏览器会报错,其他浏览器输出'test' console.log($('#test').attr('class')); </script>

【3】attr(attributeName,function(index,attr))

  attr(特性名,函数值):通过使用一个函数来设置属性,可以根据该元素上的其它属性值返回最终所需的属性值

  函数中的index表示元素在匹配集合中的索引位置,html表示元素原来的HTML内容,this指向当前的元素,函数返回用来设置的值

<div title="元素">元素一</div> <div title="元素" >元素二</div> <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script> <script> $('.test').attr('title',function(index,attr){ return attr + this.className +index }) console.log($('#ele1').attr('title'));//元素test0 console.log($('#ele2').attr('title'));//元素test1 </script>

  如果用javascript实现类似的效果,实际上就是字符串连接

  [注意]IE8-浏览器不支持getElementsByClassName()方法

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzjwjf.html