Javascript jQuery:如何选择所有伪元素:before或:after?

Javascript jQuery:如何选择所有伪元素:before或:after?,javascript,jquery,html,css,pseudo-element,Javascript,Jquery,Html,Css,Pseudo Element,在jQuery或基本javascript中,可以使用:after或:before伪元素获取所有元素 我知道getcomputedstyle,但它返回所有元素,包括或不包括:before或:after伪元素 谢谢 编辑: 比如: $("a:before").each(function () { console.log("element with :before pseudo-element") }); 没有。生成的内容元素实际上不是DOM的一部分。你不能用JS直接连接到它们。它们仅用于演示

在jQuery或基本javascript中,可以使用:after或:before伪元素获取所有元素

我知道getcomputedstyle,但它返回所有元素,包括或不包括:before或:after伪元素

谢谢

编辑:

比如:

$("a:before").each(function () {
  console.log("element with :before pseudo-element")
}); 

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

您可以对可能是伪元素的父元素或同级元素等的实际元素执行操作,并以这种方式更改它们


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

给出您想要选择类(如“has before”)的“a”标记,并以这种方式连接它们?

这是可能的,但要以一种迂回的方式

查看此演示:

逻辑是这样的:

  • 枚举在CSS中具有
    :before
    :after
    定义的所有类-这是通过遍历
    文档.样式表
    对象来完成的(您可以根据需要将代码更改为仅捕获
    :before
    :after
    等)
  • 获得类列表后,删除CSS中名称后面的部分,例如:
    .a:before
    变成
    .a
  • 现在您可以获得与这些类匹配的所有元素
  • 代码

    HTML

    <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>
    
    JS

    .classWithoutBefore {
    
    }
    
    .class2WithoutBefore {
    
    }
    
    .classWithBefore:before {
    
    }
    
    .class2WithBefore:before {
    
    }
    
    .a:before, .b:before {
    
    }
    
    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
    
    var sheets=document.styleSheets;
    var伪类=[],i=0,j=0;
    
    对于(i=0;i)一个元素有,比如说,一个“:after”伪类意味着什么?您正在寻找样式引擎附加了一些“:after”的那些元素吗内容?我怀疑这个列表对脚本引擎是可用的。这些是伪元素,而不是伪类。我只想处理在CSC中有:before伪元素的元素。请您解释一下,或者提供更多关于您试图做什么以及为什么要做的内容?好吧!我有五个没有:before style,三个有:before style。有jQu呃,我只会得到with:before样式?你知道我的意思吗?@refhat:(这似乎是一个不同的问题…
    :hover
    是一个伪类,而不是与
    :before
    :after
    相同的选择器,后者是伪元素。没有“伪”这样的东西。请不要将它们混淆。是的。该脚本用于盲目地在css定义中选择任何带有a:的内容,并使用它来匹配元素。所谓它只是一般地称为<代码>伪(这是一种错误的方式)…但是的,我知道它们完全无关。上面的脚本应该编辑(特别是匹配部分的索引)由OP来满足他的需求,正如我指出的:)