attribute,property,attr,prop的区别与比较

1,407 阅读3分钟

一,attribute

相关的方法有:

getAttribute,setAttribute,createAttribute,removeAttribute四兄弟的概念比较容易理解

相关属性有:

getAttributes

这几个都是是dom对象的方法,而不是document对象的方法,例如:

document.getElementById('root').getArribute("attr1");

下面通过代码展示:

<div id="root">
    <p id="child1" attr1="自定义属性">这是一个p标签</p>
    <link  id="child2" href="原有属性">这是一个链接</link>
</div>
<script>
    window.onload=function(){
      let attr1=document.getElementById("child1").getAttribute("attr1");
      let attr2=document.getElementById("child2").getAttribute("href");
      console.log(attr1,attr2);
    }
</script>

控制台输出结果:
自定义属性 原有属性

通过getAttribute()方法可以获取自定义属性与原有dom属性的值

getAttributes(获取html所有的定义的属性集合):

<div id="div1" class="divClass" title="divTitle" title1="divTitle1">Div</div>
<script>
    var in1=document.getElementById("div1");
    console.log(in1.attributes);
</script>

可以看到getAttributes返回的是一个NamedNodeMap类型的对象。

二,property

property是DOM中的属性,是JavaScript里的对象;

<div id="div1" class="divClass" title="divTitle" title1="divTitle1"></div>

var in1=document.getElementById("div1");
console.log(in1);

如图:可以看到id为div的dom对象的property.

下面输出html上的一些属性,可以看待通过property只能获取dom上原有的属性值,而不能获取自定义属性值。

console.log(in1.id);          //div1
console.log(in1.className);   //divClass
console.log(in1.title);       //divTitle
console.log(in1.title1);       //undefined

三,attr

attr()是jquery定义的关于属性定义以及获取的一个方法

<div id="div1" class="divClass" title="divTitle" title1="divTitle1">Div</div>
<script>
    console.log($("#div1").attr("title"),$("#div1").attr("title1"))
    $("#div1").attr("title2","title2");
    console.log($("#div1").attr("title2"));
</script>

返回结果:
divTitle divTitle1
title2

由此可看:attr方法可以设置获取自定义属性值以及原有的属性值,

四,prop

prop()方法也是jquery提供的方法,主要是用来设置和获取元素固有的属性值

<div id="div1" class="divClass" title="divTitle" title1="divTitle1">Div</div>
<script>
    console.log($("#div1").prop("class"));
    $("#div1").prop("title","给title赋值");
    console.log($("#div1").prop("title"));
</script>

返回结果:
divClass
给title赋值
<div id="div1" class="divClass" title="divTitle" title1="divTitle1">Div</div>
<script>
    console.log($("#div1").prop("title1"));
    $("#div1").prop("title2","给title2属性赋值");
    console.log($("#div1").prop("title2"));
</script>

返回结果:
undefined
给title2属性赋值

prop方法并不能够直接获取元素自定义属性的值,只有通过prop设置的自定义属性,才可以通过prop方法获取到。

prop 与 attr的区别

一些元素的固有属性,例如checkbox的checked属性只能通过prop方法进行获取,而不能通过attr属性获取

<input id="chk1" type="checkbox" />是否可见
<input id="chk2" type="checkbox" />是否可见
<script>
    console.log($("#chk1").prop("checked"));
    console.log($("#chk2").prop("checked"));
    console.log($("#chk1").attr("checked"));
    console.log($("#chk2").attr("checked"));
</script>

返回结果:
false
false
undefined
undefined

原生js的固有属性和自定义属性可以用attribute,进行相关的设置,还可以使用property获取元素固有属性。如果使用jquery,固有属性(除了一些特殊的属性,如checked除外)可以使用prop和attr都行,自定义属性获取最好使用attr方法获取,因为prop只能获取有prop方法设置的自定义属性

下面列出相关表格仅供参考:

方法 元素固有属性 自定义属性
property (js) true false
attribute (js) true true
attr (jquery) true true(一些特殊属性除外,如checked)
prop (jquery) true false(通过prop方法设置的自定义属性可以获取到)