Javascript 关于'的解释;直播';元素
我刚刚读了这篇关于节点列表的文章: 如果我理解正确,getElementsByTag名称是活动的,而querySelectorAll不是。 那么,有人可以向我解释为什么pNotLive的标题是“stackoverflow”?:Javascript 关于'的解释;直播';元素,javascript,live,getelementsbytagname,nodelist,selectors-api,Javascript,Live,Getelementsbytagname,Nodelist,Selectors Api,我刚刚读了这篇关于节点列表的文章: 如果我理解正确,getElementsByTag名称是活动的,而querySelectorAll不是。 那么,有人可以向我解释为什么pNotLive的标题是“stackoverflow”?: var pLive = document.getElementsByTagName( 'p' )[3]; var pNotLive = document.querySelectorAll( 'p' )[3]; pLive.title = "stackoverflow"
var pLive = document.getElementsByTagName( 'p' )[3];
var pNotLive = document.querySelectorAll( 'p' )[3];
pLive.title = "stackoverflow"
console.log( pNotLive.title ); // stackoverflow
//you can run this snippet in your console to verify
正如您的链接所解释的那样,
getElementsByTagName
方法返回一个集合,该集合在DOM更改时自动更新。因此,如果调用该方法,然后将新元素添加到DOM中,则会自动使用新元素更新集合
其中,如果您使用querySelectorAll
,您将获得一个DOM元素的静态列表,该列表不会自动更新
我相信您在示例中使用这种行为的原因是因为列表是静态的,而不是元素本身。因此,静态方法只是意味着列表不会更改,因此添加/删除元素不会更改列表。但是当您调用title
属性时,您的列表只是指向元素,并且该元素与创建列表时不同
简而言之,它更多的是一个引用列表(指向DOM节点),而不是一个数据对象列表(带有固定数据)。正如您的链接所解释的,
getElementsByTagName
方法返回一个集合,该集合在DOM更改时自动更新。因此,如果调用该方法,然后将新元素添加到DOM中,则会自动使用新元素更新集合
其中,如果您使用querySelectorAll
,您将获得一个DOM元素的静态列表,该列表不会自动更新
我相信您在示例中使用这种行为的原因是因为列表是静态的,而不是元素本身。因此,静态方法只是意味着列表不会更改,因此添加/删除元素不会更改列表。但是当您调用title
属性时,您的列表只是指向元素,并且该元素与创建列表时不同
简而言之,它更多的是一个引用列表(指向DOM节点),而不是一个数据对象列表(包含固定数据)。没错,因此在我的示例中,pNotLive.title不能是“stackoverflow”,或者是访问元素的属性会自动更新它?@HerrWalter:我已经扩展了我的答案,因此,在我的示例中,pNotLive.title不能是“stackoverflow”,或者是访问元素的属性会自动更新它?@HerrWalter:我已经扩展了我的回答“静态”性质与元素的属性和属性无关,它与元素本身的引用有关。“静态”属性自然与元素的属性和属性无关,它与元素本身的引用有关。