|
|

楼主 |
发表于 2022-3-22 07:59
|
显示全部楼层
本帖最后由 马黑黑 于 2022-3-22 12:49 编辑
(接一楼)
现在,JS可以通过 attributes 属性值来获得伪元素的 content 属性的内容了。我们前面讨论过,伪元素使用了类似这样的方式定义content值:先是在 css 中设定 content 值为 attr(data-x),然后在 HTML 的元素代码中加入 data-x="字符串",这样,元素显示的内容就由元素的文本、文元素的文本组成。
其中,CSS里伪元素的 content 值 attr 是内置关键字,它指向 attributes 这个属性,JS将通过元素的 attributes 属性分别获得伪元素老大老二的 content 值。假设元素的操作句柄为 ele,那么,
ele.attributes[1].value
就是伪元素 ::before 的 content 值,而 ::after 的 content 值则为 ele.attributes[1].value 。
这里,ele 的 attributes 是复数的,它是多个(两个),所以要用数组下标方式 [x] 读取,x 为 1 时是老大的值,为 2 时是老二的值。
下面的JS代码示例建立在一楼的CSS+HTML代码基础上,我们的预设是,单击div盒子,会弹出一个提示窗口,上面的内容就是读取到的两个伪元素的文本内容:
<script>
let ele = document.getElementsByClassName('mama')[0]; //获取盒子操作句柄
//盒子单击事件:匿名函数
ele.onclick = function() {
//读取伪元素content值并赋值给变量 val_1 和 val_2
let val_1 = ele.attributes[1].value,
val_2 = ele.attributes[2].value;
alert('获取伪元素的值如下:\r\n\r\n' + val_1 + '\r\n' + val_2); //显示获取到的信息
}
</script>
上面的代码,我们首次使用 getElementsByClassName(‘名称’) ,这是通过获取类名(ClassName)来得到要操纵的元素,因为可能存在多个同类名的元素,得到的结果是数组形式的,所以要指定数组下标,[0] 表示同类名元素的第一个。而 \r\n 是分行符号,这里不能用 <br> 标签,因为提示窗口不是Dom节点。
|
|