console.log('hmy-666');|

dom元素的Attribute与property的区别

一、关于attribute与property的知识前置

attributeXML元素中的概念,用于描述XML标签的附加信息,即XML标签的属性,propertyJavaScript对象中的概念,用于描述JavaScript对象的成员,即JavaScript对象的属性。

在描述HTML时需要为其设定一些属性值的键值对用以描述标签:

<input id="this-input" type="text" value="test" />

上述标签节点就定义了3attribute

id: this-input
type: text
value: test

而浏览器在解析这段HTML后,就会创建一个Element对象,该对象包括很多属性property例如idinnerHTMLouterHTML等等,而对于这个Js对象,其许多属性property都与这个节点元素具有相同或相似名称的attribute,但这不是一对一的关系。

  • 某些attribute存在与property1:1的映射,例如id属性。
  • 某些attribute存在与property1:1的映射但名称不同,例如class属性。
  • 某些attribute不存在与property的映射,例如自定义的customize属性。

二、读取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>
</head>
<body>
  <div id="box" class="box" title="我是元素自有的attribute" title1="我是元素自定义的attribute"></div>
</body>
<script>
  const e = document.getElementById('box');
  console.log("attributes:", e.attributes);
  console.dir(e)
</script>
</html>
复制代码

 

 

可以看出,读取attribute只要直接获取dom对象,使用dom.attributes就可以获取一个包裹attribute的对象,而property需要使用console.dir查看

三、修改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>
</head>
<body>
  <!-- 添加一个新的自定义attribute -->
  <div id="box" class="box" title="我是元素自有的attribute" title1="我是元素自定义的attribute" title2="我是新的元素自定义的attribute"></div>
</body>
<script>
  const e = document.getElementById('box');
  Object.defineProperty(e,'newProp',{ // 添加一个新的property
      value:'我是一个新属性'
    })
  e.newProp1 = '我是一个新属性1'
  e.setAttribute('title3', '我是元素自定义的attribute')
  console.log("attributes:", e.attributes);
  console.dir(e)
</script>
</html>
复制代码

 

 

 

 

 

可以看出,想要对attribute,必须修改xml语言,即操作dom,在上面修改,而property的修改则依赖于js的Object.defineProperty,或者直接通过对象.xxx修改。

四、关于jquery的prop()与attr()的区别,及何时使用

jquery的prop就是针对property的操作,attr则对应attribute的操作,从名字就可以看出来。

如果是操作property就使用prop方法,如果操作自定义的attribute则使用attr方法。

*特殊情况,如果这个属性同时存在property与attribute上面的话,比如复选框的checked属性,那么使用prop方法。因为checked是根据布尔值来判断是否选中的,property上的属性可以设置布尔值,而设置在attribute上的,只是string类型而已,它没有其他类型:

例子:

复制代码
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Pop-up info box — web components</title>
    <script src="main.js" defer></script>
  </head>
  <body>
    <h1>Pop-up info widget - web components</h1>

    <form>
      <div id="box">
        <label for="cvc">Enter your CVC <p img="img/alt.png" data-text="Your card validation code (CVC) is an extra security feature — it is the last 3 or 4 numbers on the back of your card."></p></label>
        <input type="checkbox" id="cvc" checked=true>
      </div>
    </form>

  </body>
  <script>
    const e = document.getElementById('cvc');
    console.log('box的attribute1111:', typeof e.getAttribute('checked')
    )
  </script>
</html>
复制代码

 

 总结:attribute是针对与标签语言的属性,修改这个元素,你需要操作dom元素进行修改,property是浏览器解析时利用js创建的js对象,操作它,你需要使用Object.defineProperty或者对象.xxx进行赋值定义

本文作者:兜里还剩五块出头

本文链接:https://www.cnblogs.com/hmy-666/p/16302240.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   兜里还剩五块出头  阅读(383)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 红豆-王菲 王菲
  2. 2 如愿((电影《我和我的父辈》主题推广曲)) - 王菲 王菲
  3. 3 匆匆那年 王菲
  4. 4 云深不知处 七音盒
  5. 5 踏山河 是七叔呢
  6. 6 你的答案 阿冗
  7. 7 虞兮叹 闻人听書_
  8. 8 燕无歇 是七叔呢
  9. 9 世间美好与你环环相扣 柏松
  10. 10 广寒宫 丸子呦
  11. 11 咬住下唇 Esna
  12. 12 大鱼 周深
  13. 13 错位时空 Audio artist
  14. 14 理想三旬 陈鸿宇
  15. 15 归寻 等什么君
燕无歇 - 是七叔呢
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

燕无歇 - 蒋雪儿

词 Lyrics:堇临/刘涛

曲 Music:刘涛

编曲 Arranger:谭侃侃

男声 Male voice:半阳

制作人 Produced by:刘涛

吉他 Guitar:谭侃侃

键盘 Keyboards:谭侃侃

合声 Backing vocals:金天

录音棚 Recording studio:北京好乐无荒录音棚

录音师 Recording Engineer:侯春阳

混音师 Mixing Engineer:侯春阳

母带后期混音师 Mastering Engineer:侯春阳

监制 Executive producer:陶诗

制作公司 Manufacturing company:好乐无荒

OP/SP:青风音乐Cheerful Music

「未经授权不得翻唱或使用」

只叹她 回眸秋水被隐去

只忆她 点破 去日苦多

借三两苦酒 方知离不可

只叹她 将思念摇落

心多憔悴 爱付与东流的水

心多憔悴 爱付与东流的水

舍命奉陪 抵不过天公不作美

舍命奉陪 抵不过天公不作美

往事回味 不过是弹指一挥

日复日望穿秋水恕我愚昧

你爱着谁 心徒留几道伤

我锁着眉 最是相思断人肠

劳燕分飞 寂寥的夜里泪两行

烛短遗憾长故人自难忘

你爱着谁 心徒留几道伤

爱多可悲 恨彼此天涯各一方

冷月空对 满腹愁无处话凄凉

我爱不悔可孤影难成双

心多憔悴 爱付与东流的水

心多憔悴 爱付与东流的水

舍命奉陪 抵不过天公不作美

舍命奉陪 抵不过天公不作美

往事回味 不过是弹指一挥

日复日望穿秋水恕我愚昧

你爱着谁 心徒留几道伤

我锁着眉 最是相思断人肠

劳燕分飞 寂寥的夜里泪两行

烛短遗憾长故人自难忘

你爱着谁 心徒留几道伤

爱多可悲 恨彼此天涯各一方

冷月空对 满腹愁无处话凄凉

我爱不悔可孤影难成双

你爱着谁 心徒留几道伤

我锁着眉 最是相思断人肠

劳燕分飞 寂寥的夜里泪两行

烛短遗憾长故人自难忘

烛短遗憾长故人自难忘