请问一下大家 html里面的div或者其他的元素,用js获取之后是对象吗?


<body>
    <div></div>
    <script>
        var div = document.querySelector('div');
        div.timer = 123;
        console.log(div.timer);
        div.setAttribute('index', 1);
        console.log(div);
    </script>
</body>

img


我用js获取的div,然后设置了div.timer=123,在控制台输出div.timer居然得到了对应的数字,但这时我console.log(div)得到的就是

img


并没有像setAttribute那样显示index=1这样啊?这是为什么呢?

嗯,不太明白问题,你是想要这样的效果吗?
+setAttributeElement对象的内置方法,你的timer是自己的一个属性。所以不显示,类似下面的innerText是一个内置属性,所以会显示.嗯,

<body>
    <div></div>
    <script>
        var div = document.querySelector('div');
        //div.timer = 123;
        div.innerText="123"
        //debugger
        //console.log(div.timer);
        console.log(div);
        div.setAttribute('index', 1);
        console.log(div);
    </script>
</body>

debugger 看下,这是DIV元素的所以内置方法和属性

accessKey: ""
align: ""
ariaAtomic: null
ariaAutoComplete: null
ariaBusy: null
ariaChecked: null
ariaColCount: null
ariaColIndex: null
ariaColSpan: null
。。。。。

是一个对象呀,怎么了有什么问题? 设置div.timer = 123, div.setAttribute('index', 1);; div标签里没有timer和index这个属性呀,所以你在打印对象时不会看到这个结果

-----这是我手打的,实际上是没有的;

你如果添加 id ,class得话你就会看到-----类似于这个的

的样子;
原因就是html 得DOM采用的是树形存储结构,每个标签中的属性什么都规定好了,你不能自己去造一些没有的属性;

很高兴得到你的采纳

H5里面要求自定义属性要以data-开头
修改属性值 element.setAttrobute('属性名',"属性值")
获取属性值 element.getAttribute("自定义的属性名")
element.dataset.属性名 = "" // 有兼容性问题
移除属性值 element.removeAttribute("自定义的属性名")