首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery:如何选择所有伪元素具有:前或后的元素?

jQuery:如何选择所有伪元素具有:前或后的元素?
EN

Stack Overflow用户
提问于 2012-07-16 11:20:45
回答 3查看 2.2K关注 0票数 4

在jQuery或中,所有元素都可以使用:after或:?

我知道getcomputedstyle,但是它返回带或不带的所有元素:前元素或伪元素之后。

谢谢

编辑:

类似于:

代码语言:javascript
复制
$("a:before").each(function () {
  console.log("element with :before pseudo-element")
}); 
EN

回答 3

Stack Overflow用户

发布于 2012-07-16 11:28:30

不是的。生成的内容元素实际上不是DOM的一部分。您不能使用JS直接连接到它们。它们仅供演示使用。

您可以对伪元素的父母或兄弟姐妹等实际元素进行处理,并以这种方式对它们进行更改。

看看下面链接到的问题BoltClock,也许您可以为所有伪元素设置一个公共属性,然后根据这个属性尝试使用jquery选择它们。

票数 1
EN

Stack Overflow用户

发布于 2012-07-16 11:56:08

给'a‘标签,你想要选择一个类,如’有-之前‘,并与他们挂钩的方式?

票数 0
EN

Stack Overflow用户

发布于 2012-07-16 15:56:29

这是可能的,但以一种周全的方式!

查看此演示:http://jsfiddle.net/BE47z/1/

逻辑是这样的:

  1. 枚举所有在CSS中具有:before:after定义的类--这是通过遍历document.styleSheets对象来完成的(您可以将代码更改为只捕获:before:after等)。如有需要)
  2. 得到类列表后,在CSS中移除它的名称,因为ex:.a:before变成.a
  3. 现在您可以获得与这些类匹配的所有元素。

代码语言:javascript
复制
<div class="element classWithoutBefore">No :before</div>
<div class="element classWithBefore">Has :before</div>
<div class="element class2WithBefore">Has :before</div>
<div class="element class2WithoutBefore">No :before</div>

CSS

代码语言:javascript
复制
.classWithoutBefore {

}

.class2WithoutBefore {

}

.classWithBefore:before {

}

.class2WithBefore:before {

}

.a:before, .b:before {

}

JS

代码语言:javascript
复制
var sheets = document.styleSheets;
var pseudoClasses = [], i = 0, j = 0;
for (i=0; i<sheets.length; i++) {
    try {
        var rules = sheets[i].cssRules;
        for (j=0; j<rules.length; j++) {
            if(rules[j].selectorText.indexOf(':before') != -1 || rules[j].selectorText.indexOf(':after') != -1) {
                pseudoClasses.push(rules[j].selectorText);
            }
        }
    }
    catch(ex) { // will throw security exception for style sheets loaded from external domains
    }
}

var classes = [];
if(pseudoClasses.length > 0) {
    pseudoClasses = pseudoClasses.join(',').split(','); // quick & dirty way to seperate individual class names
    for (i=0; i<pseudoClasses.length; i++) { // remove all class names without a : in it
        var colonPos = pseudoClasses[i].indexOf(':');
        if(colonPos != -1) {
            classes.push(pseudoClasses[i].substring(0, colonPos));
        }
    }
}

// Elements with the classes in the 'classes' array have a :before or :after defined
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11503184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档