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

如何得到网页元素的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.

相关推荐
热点推荐
突发,国民党要员罗智强称,若当选台当局领导人,将修复九二共识

突发,国民党要员罗智强称,若当选台当局领导人,将修复九二共识

兰妮搞笑分享
2024-06-05 12:06:00
2024大学生就业力调研报告:应届研究生就业率仅33%,低于本科生

2024大学生就业力调研报告:应届研究生就业率仅33%,低于本科生

互联网大聪明
2024-06-05 12:34:31
如今每个月5000元的工资,等于80年代的多少钱?答案惊到了我

如今每个月5000元的工资,等于80年代的多少钱?答案惊到了我

呼呼历史论
2024-06-04 21:59:46
大雷,巨额存款没了...

大雷,巨额存款没了...

假装是天堂
2024-06-05 19:00:35
事实证明,“消失”8年的毕福剑,已经走上了一条“不归路”

事实证明,“消失”8年的毕福剑,已经走上了一条“不归路”

华人星光
2024-06-05 15:24:02
克拉拉的健身之旅:从坚持到转变,塑造更好的自己

克拉拉的健身之旅:从坚持到转变,塑造更好的自己

云端书馆
2024-06-04 07:14:43
美军火商窜访,拜登再谈武力保台,赖清德态度转变对海巡下死命令

美军火商窜访,拜登再谈武力保台,赖清德态度转变对海巡下死命令

王晋博士
2024-06-05 17:36:36
风韵犹存,成熟美女

风韵犹存,成熟美女

娱乐八卦木木子
2024-06-05 13:24:03
乔尔杰维奇正式下课,中国男篮新教练曝光,不是杜锋,也不是杨鸣

乔尔杰维奇正式下课,中国男篮新教练曝光,不是杜锋,也不是杨鸣

宗介说体育
2024-06-05 11:16:05
与辉同行销售额已超东方甄选!董宇辉“单飞”后,东方甄选股价已下跌47%,市值蒸发超134亿

与辉同行销售额已超东方甄选!董宇辉“单飞”后,东方甄选股价已下跌47%,市值蒸发超134亿

每日经济新闻
2024-06-05 15:03:13
2岁男孩曾因吸烟红遍全球,每天要抽40支烟,14年后现况曝光了

2岁男孩曾因吸烟红遍全球,每天要抽40支烟,14年后现况曝光了

听风听你
2024-06-05 12:12:40
又一家央企控股的中字头收到监管函,7万股东瑟瑟发抖!

又一家央企控股的中字头收到监管函,7万股东瑟瑟发抖!

股海风云大作手
2024-06-05 08:52:25
高考“钉子户”唐尚珺又来了,已参加15次高考的他2024年继续备考

高考“钉子户”唐尚珺又来了,已参加15次高考的他2024年继续备考

C妈学堂
2024-06-04 13:36:34
公园邂逅:一位令人惊艳的美女

公园邂逅:一位令人惊艳的美女

白宸侃片
2024-06-04 16:53:27
去了香港才发现:满大街都是“阔腿裤和平底鞋”,却个个洋气好看

去了香港才发现:满大街都是“阔腿裤和平底鞋”,却个个洋气好看

时尚穿搭生活馆
2024-06-03 15:42:08
26页PPT曝光!女主控诉上海交通大学博士冷暴力PUA,并因他流产…

26页PPT曝光!女主控诉上海交通大学博士冷暴力PUA,并因他流产…

火山诗话
2024-06-04 21:22:14
巴萨主席谈解雇哈维:我连梅西都能赶走!他不相信球队,必须得走

巴萨主席谈解雇哈维:我连梅西都能赶走!他不相信球队,必须得走

风过乡
2024-06-05 07:38:15
惊!特斯拉超级工厂或选址武汉,将带动经济发展

惊!特斯拉超级工厂或选址武汉,将带动经济发展

辉仔故事汇
2024-06-05 15:16:23
大批军火准备运进台湾岛,大陆布下天罗地网,就等军火船自投罗网

大批军火准备运进台湾岛,大陆布下天罗地网,就等军火船自投罗网

域观天下
2024-06-05 09:51:29
尽力了!张之臻搭档马哈奇不敌赛会头号种子,无缘法网男双4强

尽力了!张之臻搭档马哈奇不敌赛会头号种子,无缘法网男双4强

直播吧
2024-06-05 18:36:09
2024-06-05 21:30:44
小象Web开发
小象Web开发
专注于web开发领域
25文章数 910关注度
往期回顾 全部

科技要闻

9家车企拿到自动驾驶落地入场券,没特斯拉

头条要闻

甘肃小伙从海南徒步4100公里回老家:到家时快哭了

头条要闻

甘肃小伙从海南徒步4100公里回老家:到家时快哭了

体育要闻

赴美试训的崔永熙,表现究竟怎么样?

娱乐要闻

《青春有你》胡文煊被曝孕期出轨

财经要闻

员工证实周大福关闭深圳工厂

汽车要闻

又一个水桶车 试驾新“卷王”极狐阿尔法S5

态度原创

健康
手机
旅游
游戏
公开课

晚餐不吃or吃七分饱,哪种更减肥?

手机要闻

苹果发布会展望:AI加持的iOS 18有哪些变化?仍有巨大谜团待解

旅游要闻

一女子从家到机场仅10分钟却没赶上飞机 愤而投诉

智能手柄北通鲲鹏50全网热售 开启玩家轻松新体验

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版