正在使用JQuery更改:before css选择器的宽度属性[duplicate]

2w3kk1z5  于 2022-11-03  发布在  jQuery
关注(0)|答案(7)|浏览(181)

此问题在此处已有答案

Selecting and manipulating CSS pseudo-elements such as ::before and ::after using javascript (or jQuery)(25个答案)
四年前就关门了。
我有一个页面,其中有一个图像,我用样式:在CSS选择器之前。
图像是动态的,因此它没有固定的宽度;所以我需要动态地设置:before rule的宽度。
我想在客户端使用JQuery来完成。
假设如下:

.column:before{
    width: 300px;
    float: left;
    content: "";
    height: 430px;
}

.column{
    width: 500px;
    float: right;
    padding: 5px;
    overflow: hidden;
    text-align: justify;
}

如何使用JQuery只更改带有:before选择器的类的width属性(而不是没有选择器的类)?

sy5wg1nm

sy5wg1nm1#

我不认为有一种jQuery方式可以直接访问伪类的规则,但是您可以在文档的头部添加一个新的style元素,如下所示:

$('head').append('<style>.column:before{width:800px !important;}</style>');

请参阅**live demo here**
我还记得曾经看到过一个插件,处理这个问题一次,但我无法找到它的第一谷歌不幸。

dzhpxtsq

dzhpxtsq2#

伪元素是影子DOM的一部分,不能修改(但 * 可以 * 查询它们的值)。
但是,有时候可以通过使用类来解决这个问题。

查询

$('#element').addClass('some-class');

CSS

.some-class:before {
    /* change your properties here */
}

这可能不适合您的查询,但它确实证明了您有时可以实现这种模式。
要获取伪元素的值,请尝试以下代码...

var pseudoElementContent = window.getComputedStyle($('#element')[0], ':before')
  .getPropertyValue('content')
xdyibdwo

xdyibdwo3#

伪元素不是DOM的一部分,因此不能使用jQuery或Javascript对其进行操作。
但是正如在已接受的答案中指出的,您可以使用JS附加一个样式块,该样式块结束对伪元素的样式化。

uidvcgyl

uidvcgyl4#

答案应该是 Jain。您不能通过伪选择器选择元素,但可以使用insertRule向样式表添加新规则。
我做了一个对你有用的东西:

var addRule = function(sheet, selector, styles) {
    if (sheet.insertRule) return sheet.insertRule(selector + " {" + styles + "}", sheet.cssRules.length);
    if (sheet.addRule) return sheet.addRule(selector, styles);
};

addRule(document.styleSheets[0], "body:before", "content: 'foo'");

http://fiddle.jshell.net/MDyxg/1/
为了更酷(也为了回答这个问题 * 真的 *),我再次推出了它,并将其 Package 在一个jQuery-plugin中(然而,jquery仍然不是必需的!):

/*!
 * jquery.addrule.js 0.0.1 - https://gist.github.com/yckart/5563717/
 * Add css-rules to an existing stylesheet.
 *
 * @see http://stackoverflow.com/a/16507264/1250044
 *
 * Copyright (c) 2013 Yannick Albert (http://yckart.com)
 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php).
 * 2013/05/12

**/

(function ($) {

    window.addRule = function (selector, styles, sheet) {

        styles = (function (styles) {
            if (typeof styles === "string") return styles;
            var clone = "";
            for (var p in styles) {
                if (styles.hasOwnProperty(p)) {
                    var val = styles[p];
                    p = p.replace(/([A-Z])/g, "-$1").toLowerCase(); // convert to dash-case
                    clone += p + ":" + (p === "content" ? '"' + val + '"' : val) + "; ";
                }
            }
            return clone;
        }(styles));
        sheet = sheet || document.styleSheets[document.styleSheets.length - 1];

        if (sheet.insertRule) sheet.insertRule(selector + " {" + styles + "}", sheet.cssRules.length);
        else if (sheet.addRule) sheet.addRule(selector, styles);

        return this;

    };

    if ($) $.fn.addRule = function (styles, sheet) {
        addRule(this.selector, styles, sheet);
        return this;
    };

}(window.jQuery));

用法很简单:

$("body:after").addRule({
    content: "foo",
    color: "red",
    fontSize: "32px"
});

// or without jquery
addRule("body:after", {
    content: "foo",
    color: "red",
    fontSize: "32px"
});

https://gist.github.com/yckart/5563717

dphi5xsq

dphi5xsq5#

一种方法是在图像上使用一个属性,然后使用jQuery修改它,然后在CSS中使用该值:
HTML(注意,我假设.columndiv,但它可以是任何内容):

<div class="column" bf-width=100 >
    <img src="..." />
</div>

查询:

// General use:
$('.column').attr('bf-width', 100);
// With your image, along the lines of:
$('.column').attr('bf-width', $('img').width());

然后为了在CSS中使用该值:

.column:before {
    content: attr(data-content) 'px';
    /* ... */
}

这将从.column中获取属性值,并将其应用于之前的。

jecbmhm3

jecbmhm36#

您可以尝试从基底类别继承属性:
第一个

s8vozzvw

s8vozzvw7#

his answer to Selecting and manipulating CSS pseudo-elements such as ::before and ::after using jQuery中的螺栓时钟状态
虽然浏览器通过CSS呈现它们,就像它们是其他真实的的DOM元素一样,但是伪元素本身并不是DOM的一部分,因此您不能使用jQuery选择和操作它们。
可能最好使用jQuery设置样式,而不是使用伪CSS选择器。

相关问题