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

如何得到网页元素的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-12-25 08:48:20
台北101大楼要改名“台湾101”?民进党提议被批 “吃饱太闲”,网友:要不台北市也改台湾市?

台北101大楼要改名“台湾101”?民进党提议被批 “吃饱太闲”,网友:要不台北市也改台湾市?

环球网资讯
2024-12-24 12:22:29
冷空气又来!福建天气大反转,气温或创新低

冷空气又来!福建天气大反转,气温或创新低

鲁中晨报
2024-12-24 21:06:06
长期服用倍他乐克,现在基本上撑不过1分钟,还要不要继续吃?

长期服用倍他乐克,现在基本上撑不过1分钟,还要不要继续吃?

神经外科杜医生
2023-05-22 11:55:41
个税,降了!12月15日,全面实施

个税,降了!12月15日,全面实施

高顿CMA
2024-12-24 13:05:26
不打垮中国不罢休?“大鱼”现身,不是美国,中俄都没料到!

不打垮中国不罢休?“大鱼”现身,不是美国,中俄都没料到!

星辰故事屋
2024-12-23 22:23:45
揭秘亚洲最穷国,落后中国三十年,女性惊人开放,游客秒变土豪

揭秘亚洲最穷国,落后中国三十年,女性惊人开放,游客秒变土豪

梦史
2024-12-16 17:01:53
实探安徽绩溪“县政府门口夜市”:有人摆摊六七年从未被驱赶,政府大楼也能随便进

实探安徽绩溪“县政府门口夜市”:有人摆摊六七年从未被驱赶,政府大楼也能随便进

极目新闻
2024-12-24 23:26:25
中国迎来第4次红利,比电商与直播还火爆,将再带动一大批人致富

中国迎来第4次红利,比电商与直播还火爆,将再带动一大批人致富

森林聊商业
2023-03-27 18:12:41
奥尼尔谈霍华德2020年在湖人夺冠:就一搭便车的乘客

奥尼尔谈霍华德2020年在湖人夺冠:就一搭便车的乘客

直播吧
2024-12-25 08:37:14
工作12个小时后,女员工拒绝年会跳舞被辞退!公司称顶撞领导

工作12个小时后,女员工拒绝年会跳舞被辞退!公司称顶撞领导

极目新闻
2024-12-24 20:47:01
美股收盘:纳指重回2万点上方 苹果再刷新高市值达3.9万亿

美股收盘:纳指重回2万点上方 苹果再刷新高市值达3.9万亿

财联社
2024-12-25 03:31:21
美国旧将:迈阿密有GOAT却输给第9 是北美体育史上最大失败之一

美国旧将:迈阿密有GOAT却输给第9 是北美体育史上最大失败之一

直播吧
2024-12-25 00:37:21
封海!南海交锋正式打响,解放军这次不再废话,直接用实力说话!

封海!南海交锋正式打响,解放军这次不再废话,直接用实力说话!

小lu侃侃而谈
2024-12-24 21:38:38
一夜回到成名前,吴柳芳平台账号粉丝数从600多万暴跌变成了4.4万

一夜回到成名前,吴柳芳平台账号粉丝数从600多万暴跌变成了4.4万

尘语者
2024-12-24 10:18:41
上海楼市全军覆没,上海楼市黄浦区房价从109000元跌至103000元

上海楼市全军覆没,上海楼市黄浦区房价从109000元跌至103000元

有事问彭叔
2024-12-22 15:26:07
解放军新一代机枪悄然亮相,比81式步枪还短,它的威力如何?

解放军新一代机枪悄然亮相,比81式步枪还短,它的威力如何?

军迷集结号本尊
2024-12-24 19:48:56
雷蒙多发声后,关于芯片和稀土,英媒公开表态,中国不是好欺负的

雷蒙多发声后,关于芯片和稀土,英媒公开表态,中国不是好欺负的

蓝色海边
2024-12-25 05:34:04
真让人搞不懂!一个11号秀,0次全明星,为什么被十几支球队疯抢

真让人搞不懂!一个11号秀,0次全明星,为什么被十几支球队疯抢

球毛鬼胎
2024-12-24 22:00:58
吸金200亿!落魄的诺基亚,2024年居然卖断货,重回世界第二!

吸金200亿!落魄的诺基亚,2024年居然卖断货,重回世界第二!

毒sir财经
2024-12-06 21:10:59
2024-12-25 09:15:00
小象Web开发
小象Web开发
专注于web开发领域
25文章数 909关注度
往期回顾 全部

科技要闻

特斯拉大涨7%,苹果市值新高达3.9万亿美元

头条要闻

9国明年正式成为金砖伙伴国 专家:重大地缘政治事件

头条要闻

9国明年正式成为金砖伙伴国 专家:重大地缘政治事件

体育要闻

又香又臭的拉文,好像还挺适合掘金?

娱乐要闻

曝何捷年薪15万,张馨予发文霸气护夫!

财经要闻

外汇市场硝烟弥漫 人民币跌破7.3

汽车要闻

柴油才对味 大通星际X 2.5T舒适得不像皮卡

态度原创

教育
艺术
本地
游戏
公开课

教育要闻

6天后贵1000元?寒假班早鸟价即将结束,名师阵容曝光

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

本地新闻

好吃潮州|尝一口,这里的美食有点“潮”

消息称《银河战士Prime 4》为Switch 2首发护航

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版