JS中attr和prop属性的区别以及优先选择示例介绍

yizhihongxing

JS中attr和prop属性的区别以及优先选择示例介绍:

在JavaScript中,使用attr和prop两个属性来操作HTML元素的属性(例如:元素的ID,name,checked等)。这两个属性的作用都是为了获取或设置HTML元素的属性,但它们之间还是有些不同的。

区别

  1. An attr可以用来读取或设置HTML属性{@lang=html}

html
<input id="my-checkbox" type="checkbox" checked />

javascript
const myCheckbox = document.getElementById('my-checkbox');
console.log(myCheckbox.getAttribute('checked')); // "checked"
myCheckbox.setAttribute('checked', false);
console.log(myCheckbox.checked); // true

这里我们首先通过getElementById()方法获取元素节点,并使用getAttribute()方法来获取元素上的"checked"属性,然后再通过setAttribute()方法将该属性设置为false。最后,我们用checked属性读取结果。

  1. A prop 可以用于读取或设置JavaScript对象属性{@lang=javascript}

javascript
const myCheckbox = document.getElementById('my-checkbox');
console.log(myCheckbox.checked); // true
myCheckbox.checked = false;
console.log(myCheckbox.getAttribute('checked')); // "checked"

在这种情况下,我们通过checked属性直接读取或设置input元素的状态,而不是通过getAttribute()和setAttribute()方法。

因此,一些重要的区别可以被总结为:

  • An attr 用于读取或设置HTML特性,而不是元素的属性。
  • A prop 用于读取或设置元素的属性,而不是HTML特性。

优先选择示例

当你需要读取或设置元素的属性时,应该始终优先选择使用prop属性。然而,在某些情况下(例如,自定义HTML5属性),您需要使用attr属性。

例如,看下面这个select元素:

<select>
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="opel" selected>Opel</option>
  <option value="audi">Audi</option>
</select>

我们可以通过以下方式读取和设置该元素的属性:

const mySelect = document.querySelector('select');

console.log(mySelect.value); // "opel"
console.log(mySelect.getAttribute('value')); // "volvo"

mySelect.value = 'audi';
console.log(mySelect.value); // "audi"

mySelect.setAttribute('value', 'opel');
console.log(mySelect.value); // "opel"

从中我们发现,在这种情况下,使用prop属性可以更清晰和便捷地读取和设置元素的属性。

另一个例子是自定义data-*属性:

<div id="myDiv" data-my-property="my-value"></div>
const myDiv = document.getElementById('myDiv');

console.log(myDiv.dataset.myProperty); // "my-value"
console.log(myDiv.getAttribute('data-my-property')); // "my-value"

myDiv.dataset.myProperty = 'another-value';
console.log(myDiv.dataset.myProperty); // "another-value"

myDiv.setAttribute('data-my-property', 'new-value');
console.log(myDiv.dataset.myProperty); // "new-value"

在这种情况下,使用attr属性可以更好地操作自定义HTML5属性。

综上所述,一般情况下,你应该始终优先选择使用prop属性,因为它更快速、更直接、更清晰。但是在某些情况下,使用attr属性更合适,比如读取和设置自定义HTML5属性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS中attr和prop属性的区别以及优先选择示例介绍 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • jquery实现将获取的颜色值转换为十六进制形式的方法

    当我们使用jQuery获取颜色值时,返回的通常是颜色值的字符串。但是在使用颜色值时,经常需要转换为十六进制形式的字符串。下面是将一个颜色值转换为十六进制字符串的方法。 步骤1:将获取的颜色值转换为RGB值 在jQuery中,我们可以使用css函数来获取元素的颜色值,并将其转换为RGB值。此处使用一个例子: var colorValue = $(‘body’)…

    jquery 2023年5月28日
    00
  • jquery库或JS文件在eclipse下报错问题解决方法

    当使用jQuery库或JS文件在Eclipse中时,有时可能会遇到以下错误: jQuery未定义 无法解析$或jQuery 找不到jQuery库 这些错误可能是由于Eclipse没有正确地连接jQuery库或者JS文件导致的。以下是解决这些问题的步骤: 步骤一:在Eclipse中添加jQuery库或JS文件 在Eclipse的“WebContent”文件夹下…

    jquery 2023年5月27日
    00
  • jQWidgets jqxGrid deleterow()方法

    以下是关于“jQWidgets jqxGrid deleterow()方法”的完整攻略,包含两个示例说明: 简介 jqxGrid 控件的 deleterow() 方法用于删除表格中的一行数据。 完整攻略 以下是 jqxGrid 控件 deleterow() 方法的完整攻略: 定义 deleterow() 在 jqxGrid 控件中可以使用 deleterow…

    jquery 2023年5月11日
    00
  • 当没有找到源图像时,如何隐藏 Image Not Found 图标

    当我们在网页中插入一张图片的时候,我们会使用以下代码: <img src="path/to/image.jpg" alt="Image Description"> 其中,src 属性用于指定图片的路径,如果找不到指定路径的图片,浏览器会默认显示一个”Image Not Found”的图标。 为了解决这个问题…

    jquery 2023年5月12日
    00
  • jQuery中closest()函数用法实例

    jQuery中closest()函数用法实例 closest()函数介绍 closest()函数是jQuery中的一个重要的DOM遍历方法,用来查找符合指定选择器的最近祖先元素。若没有找到符合选择器的祖先元素,则返回一个空的jQuery对象。 closest()函数语法 closest()函数的语法如下: $(selector).closest(filter…

    jquery 2023年5月27日
    00
  • jQWidgets jqxFileUpload autoUpload 属性

    jQWidgets jqxFileUpload autoUpload 属性 jQWidgets是一个基于jQuery的UI组件库,提供了丰富UI组件和工具包表格等。jqxFileUpload是jQWidgets的一个组件,用于实现上传功能。autoUpload是jqxFileUpload的一个属性,用于设置是否自动上传文件。本文将详细介绍autoUpload…

    jquery 2023年5月9日
    00
  • jQuery UI Spinner创建事件

    以下是关于 jQuery UI Spinner 创建事件的详细攻略: jQuery UI Spinner 创建事件 create 事件在 Spinner 控件创建时触发。可以使用该事件来执行一些初始化操作或者修改 控件的默认行为。 语法 $( ".selector" ).spinner({ create: function( event,…

    jquery 2023年5月11日
    00
  • jQWidgets jqxNumberInput rtl属性

    以下是关于 jQWidgets jqxNumberInput 组件中 rtl 属性的详细攻略。 jQWidgets jqxNumberInput rtl 属性 jQWidgets jqxNumberInput 组件的 rtl 属性用于设置组件的文本方向为从右到左。 语法 $(‘#numberInput’).jqxNumberInput({ rtl: true…

    jquery 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部