異なるDOMオブジェクトの属性とプロパティの

プロパティ

ポイントの方法によって得られたDOMオブジェクトのプロパティ値

document.body.className //获取body的类名

それはカスタムプロパティのように、他のJSのオブジェクトのように保存することができるように、DOMオブジェクトは、オブジェクトであります

document.body.myData = {
    name : 'John'
}
document.body.sayHi = function(){
    alert('hello world');
}

console.log(document.body.myData.name);
console.log(document.body.sayHi());

プロパティとメソッドの定義が唯一のJSに表示されますので、HTMLには影響しません。

あなたはすべての標準およびカスタムproperyプロパティで...のために使用してトラバースすることができます

document.body.custom = 5;
var list = [];
for(var key in document.body){
    list.push([key, document.body[key]]);
}
console.log(list);

だから、カスタムDOMプロパティ:

  • 任意の値が存在することができ、プロパティ名は大文字と小文字が区別されます

  • HTMLは影響しません。

属性

DOMノードは、HTML属性にアクセスするための方法を提供し、

 ele.hasAttribute(name) //>=ie8
 ele.getAttribute(name)
 ele.setAttribute(name)
 ele.removeAttribute(name) //>=ie8

注: 以下とIE8 IE8の互換モードでは、setAttributeメソッドが変更は、DOMプロパティ、ではない属性です

そして、財産のコントラスト、属性:

  • それだけで文字列を指定できます

  • 名前は大文字と小文字を区別しません

  • これは、HTMLで表示されます。

  • あなたは、DOMは、すべての属性properyリストを属性を使用することができます

<body>
  <div about="Elephant" class="smiling"></div>

  <script>
    var div = document.body.children[0]
    console.log( div.getAttribute('ABOUT') ) // (1)
    
    div.setAttribute('Test', 123)   // (2)
    console.log( document.body.innerHTML )   // (3)
  </script>
</body>

プロパティと属性の同期

各オブジェクトは、標準のDOMノードの特性を有する3つの同期の可能性があります

  1. 標準のDOMプロパティと属性値は同じまま

    document.body.setAttribute('id','pageWrap')
    console.log(document.body.id) // pageWrap
  2. 標準のDOMプロパティと属性の値は、必ずしも厳密に同じではありません

    <a id="test">测试</a>
    
    <script>    
    var a = document.getElementById('test');
    a.href = '/';
    console.log(a.getAttribute('href')); // '/'
    console.log(a.href); // 完整链接,但ie7及以下'/' (若链接中有中文,ff和chrome下会转义),这是因为w3c规定href property必须为格式良好的链接
    </script>   

    他のいくつかの属性は、このようなinput.checkedと同じ同期値は、ありません

    <input type='checkbox' id='check' checked='aa'/>
    <script>
    var input = document.getElementById('check');
    console.log(input.checked); //true
    console.log(input.getAttribute('checked')) //'aa'
    </script> 

    プロパティ値は、唯一の真または偽のかもしれinput.checkedが、属性値は任意の値のあなたの塗りつぶしを取得することです

  3. 組み込みのプロパティが一方向の同期でのいくつかの
    例として、input.value同期value属性の値は、しかし、プロパティ値のvalue属性値が値を同期していない。
    そして、入力ボックスのユーザーは入力値を変更した後、値がプロパティの値が変更され、value属性値変わらず。

    <input type="text" id="text"/>
    <script>
    var input = document.getElementById('text');
    
    input.setAttribute('value','hello');
    console.log(input.value); //hello
    console.log(input.getAttribute('value')); //hello
    
    input.value = 'new';
    console.log(input.value); //new
    console.log(input.getAttribute('value')); //hello
    
    input.setAttribute('value','other'); //此时再改变value attribute,value property不再变化
    console.log(input.value); //other
    console.log(input.getAttribute('value')); //other
    </script>

    したがって、初期値は、入力値がブロックに変更されたかどうかを決定するため、値属性入力ボックスを格納することができます

  4. Properyと属性名が同期されていない
    クラス/クラス名を
    JSクラスではなくclassNameプロパティクラスのプロパティを使用するのでは、予約語なので、クラス属性であるためです。

    document.body.setAttribute('class', 'big red bloom');
    console.log(document.body.className); //big red bloom, 但ie8及以下输出为空

    <IE9に加えて、他のブラウザでは、クラス属性を変更し、クラス名を変更します。互換性を確保するために、classNameプロパティで、クラス属性を使用しないでください。

概要

属性とプロパティは、重要な機能のDOMモデルです。

実際には、財産のシーンの98%は、属性には、次の2つのシナリオでのみ使用しました:

  1. 財産の使用として定義されたHTML属性は、HTMLに同期しないので。

  2. 必要なHTML属性、およびプロパティを構築し、同期していない、とあなたは、この属性を必要と確信していますする。Eg.input value属性。


以下のために翻訳しhttp://javascript.info/tutorial/attributes-and-custom-properties

おすすめ

転載: www.cnblogs.com/baimeishaoxia/p/12668786.html