setAttribute、getAttribute、removeAttribute

问题:下面两者的区别

box.setAttribute("liang", "456");
box.liang = 789;
<body>
	<div id="box" liang="123"></div>
</body>

<script>
		const box = document.getElementById('box');

            /*// 标签里元素里的自定义属性
            box.setAttribute('liang', '456');

            console.log(box.liang); // 输出undefined*/

            /*// JS里对象的 自定义属性
            box.liang = 789;

            console.log(box.liang); // 输出789*/

            console.log(box.liang); // 输出undefined     
</script>

setAttribute 设置的是标签里的liang

box.liang 设置的是box这个对象里的属性liang

   它跟标签是没有关系的,既不能修改div标签里的liang,也不能获取
   输出789,输出的是box这个对象的属性liang被 box.liang这条语句设置为值 789
而不是 div标签里的liang的值 被 box.liang这条语句修改成789

栗子1:

<script>
        window.onload = function () {
            let inp = document.getElementById('inp');

            inp.value = 'liang';
        };
    </script>
</head>

<body>
    <input type="text" id="inp">
</body>

页面立即显示 liang
在这里插入图片描述
打开控制台,查看Element
在这里插入图片描述
发现并没有value这个属性,也就是说 输出的是 box这个对象上的 value属性值,而不是input标签里的value属性值


栗子2:

<script>
        window.onload = function () {
            let inp = document.getElementById('inp');

            inp.value = 'liang';

            /*inp.setAttribute('value', 'liang');*/

        };
    </script>
</head>
<body>
<div id="box" liang="123">
    <input type="text" id="inp" value="123">
    <p></p>
    <span></span>
    <img src="#" alt="">
</div>
</body>

立即输出liang
查看Element:
在这里插入图片描述
标签内的value 没有改变

栗子3:

/*inp.value = 'liang';*/

 inp.setAttribute('value', 'liang');

页面也立即输出liang
打开控制台查看Element
在这里插入图片描述
发现标签里添加了value属性


栗子4:

<script>
        window.onload = function () {
            let inp = document.getElementById('inp');

            /*inp.value = 'liang';*/

            inp.setAttribute('value', 'liang');

        };
    </script>
</head>
<body>
    <input type="text" id="inp" value="123">
</body>

页面立即输出liang
查看Element:
在这里插入图片描述
标签内的value属性改为了 liang


在控制台操作以下输入:
原始状态:
在这里插入图片描述
操作1:
在这里插入图片描述
无需刷新,立即输出123

操作2:
在这里插入图片描述
查看element,已做改变:
在这里插入图片描述
页面没有改变,控制台输出undefined

操作3:
在这里插入图片描述
无需刷新,直接显示 789

可以看出,当不刷新页面时,setAttribute输出undefined。
原因:
inp.value在修改值的过程中,修改的不是标签内 value属性的值,而是修改input里的值。
而setAttribute 修改的是 value属性的值,但不会触发视图更新

所以 只用setAttribute 操作非法的自定义属性的标签属性节点


栗子:

<script>
        window.onload = function () {
            let inp = document.getElementById('inp');

            inp.value = 'liang';

            /*inp.setAttribute('value', 'liang');*/

        };
    </script>

</head>
<body>
<div id="box" liang="123">
    <input type="checkbox" id="inp" checked="123">
    <!--不管checked 的值是什么,复选框都会被选中-->
</div>

控制台输入:
在这里插入图片描述
复选框默认选中,就算checked是个空值,也会是选中状态

如何让复选框不选中?

inp.checked = false;

但是 inp.setAttribute(“checked”, false); 还是选中状态
那么可以 inp.removeAttribute(‘checked’);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁什么鸭,

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值