网易首页 > 网易号 > 正文 申请入驻

如何得到网页元素的CSS选择器

0
分享至

浏览器的Web开发者工具为我们提供了许多实用的功能,其中一个最常用的面板是Elements,我们可以其中为元素增加属性,修改元素内容等。而另一个可能不是太多人知道的功能是它可以让我们复制选中元素的CSS选择器,如下图所示:

点击Copy selector菜单之后,会把当前元素的CSS选择器保存在粘贴板中,你可以在你的编辑器粘贴出它的内容,例如:

#question > div.post-layout > div.postcell.post-layout--right > div.post-text > p

你可能会有一个疑问:我们为什么需要得到元素的选择器呢?它有什么用呢?

设想你有个需求:我们想知道网站访客对于页面中哪些部分感兴趣,点击了哪些元素?甚至我们想以热力图的形式来展示页面中的点击分布图。

这时候我们需要知道用户点击了哪个元素,而选择器对于定位元素至关重要。它可以作为元素在网页中的唯一识别符,在现代浏览器中可以使用 querySelector() 方法来选中它们。

上图开发者工具可以方便的提供它的值,遗憾的是它不属于浏览器API的一部分,对于开发者来说想在网页环境中执行,则需要手动实现这个功能。

场景1. 含有 id 属性的元素

这种是最简单的场景,我们只需要读取元素的id属性值即可。

场景2. 没有 id 属性的元素

如果一个元素没有id属性,我们就失去了快捷途径。接下来要做的就是逐级向上查询它的父级元素,并得到最终的选择器。我们继续扩展这个函数的功能,如下:

我们简单介绍一下上述代码中的要点:

· #1 我们用了while循环来遍历当前元素的父级元素

· #2 如果元素含有 id 属性,则把id选择器置入数组,循环结束

· #3 如果遍历到达了 body 元素,则把body标签置入数组,循环结束

· #4 这里用了一个 for 循环来查询元素在它父级元素中的位置

· #5 为 element 赋值为它的父级元素,继续向上遍历

· #6 最后把数组结果以 箭头符号连接并返回

上述代码在现代浏览器中工作良好,不过如果你在IE8中运行上述代码,可能会得不到期望的结果。原因在于其中的 previousElementSibling 属性在IE8中不支持。

又是浏览器兼容性问题!如果你不需要兼容IE8,上述代码就已经足够了。如果必须兼容的话,则需要增加更多兼容代码:

我们新增了一个 previousElementSibling 函数,在其中做了浏览器兼容。对于现代浏览器仍会使用 previousElementSibling 属性,对于不支持此属性的浏览器则使用传统的 previousSibling属性并确保元素的类型为一个元素节点。

至此,我们就兼容了所有的浏览器!

场景3 元素含有id属性但需要忽略

文章写到这里,似乎应该结束了,为什么我有时候会需要忽略一个元素的id属性值呢?使用id不是很简单明了吗?

没错,id是最简单易用的方式。不过这一切的前提是页面中的id是稳定可靠的,设想一下如下元素:

上述元素的id属性值中含有空格,是一个无效的id值。使用W3 提供的HTML检查器会提示如下错误:

所以我们的getCssPath() 函数需要增加参数,允许不使用id属性。

此时你调用 getCssPath(document.getElementById("invalid id"), true) 返回的字符串格式是 "body > div:nth-child(4)" ,而不是再是 “#invalid id”。这样,我们就可以使用 document.querySelector ()选中这个元素了。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
日媒狂欢:美国航母来了!只给了中国3个多月的“真空期”

日媒狂欢:美国航母来了!只给了中国3个多月的“真空期”

消失的电波
2024-11-21 10:10:11
贵州将新增一座机场,投资21.5亿元,明年通航,位于一个小县城

贵州将新增一座机场,投资21.5亿元,明年通航,位于一个小县城

荷兰豆爱健康
2024-11-23 13:01:07
全球知名汽车博主买比亚迪被喷

全球知名汽车博主买比亚迪被喷

中关村在线
2024-11-21 12:08:19
埔寨宣布退群,铁了心跟中国混,越南只剩两条路!

埔寨宣布退群,铁了心跟中国混,越南只剩两条路!

智凌纵横
2024-11-23 19:15:03
暴跌22万,奔驰才是“暴跌王”,52万一路降至12万,2.0T+9AT后驱,商务家用两不误

暴跌22万,奔驰才是“暴跌王”,52万一路降至12万,2.0T+9AT后驱,商务家用两不误

华哥视界
2024-11-23 09:03:06
为什么我们现在不吹5G了?

为什么我们现在不吹5G了?

星辰故事屋
2024-11-11 20:30:00
快船赢球迎一喜一忧!4连胜冲上第五,魔鬼4连客哈登又是单核

快船赢球迎一喜一忧!4连胜冲上第五,魔鬼4连客哈登又是单核

体坛小李
2024-11-23 15:15:00
直播间热度下降、门口摊位空荡、晓华理发人走茶凉?本人大方回应

直播间热度下降、门口摊位空荡、晓华理发人走茶凉?本人大方回应

探寻者
2024-11-23 12:09:12
造成毛岸英牺牲的罪魁祸首,让毛主席痛恨得罪人,他们下场如何?

造成毛岸英牺牲的罪魁祸首,让毛主席痛恨得罪人,他们下场如何?

顾史
2024-11-14 03:02:09
义乌,首次夺鼎!还实现金华“零”突破!

义乌,首次夺鼎!还实现金华“零”突破!

蓝色海边
2024-11-23 10:09:28
中国发出警告:90天内不支付358亿赔偿金,18艘军舰就别想要了

中国发出警告:90天内不支付358亿赔偿金,18艘军舰就别想要了

星辰故事屋
2024-06-09 17:09:59
摧毁卫星简单粗暴!歼16万米高空,1发反卫星导弹可摧毁美军GPS

摧毁卫星简单粗暴!歼16万米高空,1发反卫星导弹可摧毁美军GPS

胖福的小木屋
2024-11-23 00:15:20
华为手机新技术将亮相!余承东发文:强悍性能超乎所见......

华为手机新技术将亮相!余承东发文:强悍性能超乎所见......

每日经济新闻
2024-11-21 15:36:09
贵人!哈登:科比投资运动饮料狂赚4.5亿刀 他让我投50万挣了2800万

贵人!哈登:科比投资运动饮料狂赚4.5亿刀 他让我投50万挣了2800万

818体育
2024-11-23 23:09:50
警惕!多地已出现!浙江警方紧急提醒

警惕!多地已出现!浙江警方紧急提醒

台州交通广播
2024-11-23 12:16:02
活佛王兴夫“点化”140位女信徒,全程不穿衣服,场面失控

活佛王兴夫“点化”140位女信徒,全程不穿衣服,场面失控

卿昀
2023-09-23 02:38:56
一个女人,对你动情了,下意识出现的3个反应

一个女人,对你动情了,下意识出现的3个反应

巧大叔
2024-11-22 23:43:14
7万件羽绒服,没一件是真的!公司回应惹众怒,官方曝光更多细节

7万件羽绒服,没一件是真的!公司回应惹众怒,官方曝光更多细节

小盖纪实
2024-11-23 17:29:33
妹子“光屁股”出门逛街被偷拍发到网上!现场画面太辣眼,男同胞嘴脸更好笑

妹子“光屁股”出门逛街被偷拍发到网上!现场画面太辣眼,男同胞嘴脸更好笑

经典段子
2024-11-21 22:40:10
国足的三场世预赛为何体能突然行了,都没有抽筋的!

国足的三场世预赛为何体能突然行了,都没有抽筋的!

百里无心
2024-11-23 10:53:18
2024-11-24 04:04:49
小象Web开发
小象Web开发
专注于web开发领域
25文章数 909关注度
往期回顾 全部

科技要闻

华为徐直军首谈鸿蒙生态是什么

头条要闻

拜登政府常务副国务卿放话:我们在努力"拆散"中俄

头条要闻

拜登政府常务副国务卿放话:我们在努力"拆散"中俄

体育要闻

那个"最惨背景帝" 41岁还是五大联赛主力

娱乐要闻

德云社人事大变动!烧饼担任副总

财经要闻

钟睒睒的“愤怒”,谁能消解?

汽车要闻

对话张纯伟:80万!捷途立了一个新Flag

态度原创

本地
旅游
健康
公开课
军事航空

本地新闻

云游中国 | 拒绝特种兵!北方也有“真江南”

旅游要闻

吉林长春:机器狗上岗 服务雪场游客

花18万治疗阿尔茨海默病,值不值?

公开课

一块玻璃,如何改变人类世界?

军事要闻

普京:俄拥有"榛树"导弹储备 且有必要进行批量生产

无障碍浏览 进入关怀版