js常见问题-节点中property和attribute的区别

本文探讨了JavaScript中attribute(HTML特性)与property(对象属性)的区别,包括取值与赋值方式,以及两者同步与异步更新的特性。通过实例演示了如何操作DOM的属性和特性,并揭示了它们在编程实践中的关键应用。

JS中attribute和property的区别

  • property是DOM中的属性,是JavaScript里的对象;
  • attribute是HTML标签上的特性,它的值只能够是字符串;

1.attribute和property介绍

<!DOCTYPE html>
<html lang="en">

<head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Document</title>
      <style>
      </style>
</head>

<body>
      <div id="div1" data-val='11' class="divClass" title="divTitle" title1="divTitle1">zhzihzio</div>
      <form action="submit" method="post">
            <label for="Name">Number:</label>
            <input type=“text“ name="Name" id="Name" autocomplete='off' />
            <button id='test' action='submit'>按钮</button>
      </form>

      <div style="height:1px;overflow:hidden;background:red"></div>

      <script>
            var in1 = document.getElementById("div1");
            console.log(in1);
            console.log(in1.id);          //div1
            console.log(in1.className);        //divClass
            console.log(in1.title);          //divTitle
            console.log(in1.attributes['data-val'].value)  //11
            console.log(in1.dataset.val)  //11
            console.log(in1.title1);       //undefined
            console.log(in1.attributes['title1'].value)  //divTitle1
      </script>
</body>

</html>

Attribute就是dom节点自带的属性,例如html中常用的id、class、title、align等。

而Property是这个DOM元素作为对象,其附加的内容,例如childNodes、firstChild等。

attributes是属于property的一个子集

2.attribute和property的取值和赋值

attribute用setAttribute()和getAttribute()来操作即可

**setAttribute()的两个参数,都必须是字符串。**即对特性Attribute职能赋值字符串,而对属性Property就可以赋任何类型的值了。

var ti = div1.getAttribute("title1");
div1.setAttribute('class', 'a');
div1.setAttribute('title', 'b');
div1.setAttribute('title1', 'c');
div1.setAttribute('title2', 'd');

Property赋值

div1.className = 'a';
div1.align = 'center';
div1.AAAAA = true;
div1.BBBBB = [1, 2, 3];

3. 更改property和attribute其中一个值,会出现什么结果?

in1.value='new value of prop';

console.log(in1.value);               // 'new value of prop'
console.log(in1.attributes.value);         // 'value="1"'
in2.setAttribute('value','ni')
console.log(in2.value);          //ni
console.log(in2.attributes.value); //value='ni'

对于 html 的标准属性来说,attribute 和 property 是同步的,是会自动更新的,但是对于自定义的属性来说,他们是不同步的

### JavaScript 对象 Property 属性详解 #### 定义与访问 Property 是 DOM 节点作为 JavaScript 对象时拥有的属性值。这些可以视为标准的 JavaScript 对象属性,允许读取设置数值、布尔值或其他数据类型而不仅限于字符串[^2]。 例如,在 HTML 中有一个输入框 `<input id="example" value="initial">`,通过 JavaScript 获取此元素并操作其 `value` 属性: ```javascript let inputElement = document.getElementById('example'); console.log(inputElement.value); // 输出 "initial" inputElement.value = 'new value'; console.log(inputElement.value); // 输出 "new value" ``` 上述代码展示了如何直接获取更改一个表单字段的内容而不必担心转换成字符串的问题。 #### 特殊处理 对于某些特定类型的 property,浏览器可能会提供额外的功能或默认行为。比如点击事件处理器 (`onclick`) 或者样式类名 (`className`) 都属于此类特殊 case 的 property。 考虑下面的例子来说明这一点: ```javascript // 添加点击事件监听器 document.querySelector('#myButton').onclick = function() { alert('按钮被点击!'); }; // 修改元素的 CSS 类 const element = document.getElementById('someId'); element.className += ' newClass'; // 增加一个新的CSS类给这个元素 ``` 这里展示的是怎样利用 properties 来绑定交互逻辑或是改变页面外观,这远超出了简单地存储文本信息的能力范围之外。 #### Attribute vs Property 值得注意的是,虽然两者看起来相似,但是它们之间存在本质的区别——attribute 存在于 HTML 文档中并且总是表现为字符串形式;而 property 则存在于内存里的 JS 对象上,并且能够容纳更广泛的数据类型。 当从文档加载完成之后首次接触某 HTMLElement 时,property 将会初始化为其对应的 attribute 值 (如果存在的话),但随后二者就可以独立变化了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值