Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript或jquery修改:before psedo元素属性?_Javascript_Jquery_Css_Setattribute - Fatal编程技术网

如何使用javascript或jquery修改:before psedo元素属性?

如何使用javascript或jquery修改:before psedo元素属性?,javascript,jquery,css,setattribute,Javascript,Jquery,Css,Setattribute,我试图修改伪元素的left属性:before。我使用JavaScript或jQuery修改任何其他元素都没有问题,但在尝试修改:before选项卡中的元素时似乎遇到了问题 举例来说,我似乎无法将下面的:before元素的left属性设置为200 我的css: #buttonBox { position: absolute; width:150px; z-index:10; left:298px; top: 130px; } #buttonBox:befo

我试图修改伪元素的left属性:before。我使用JavaScript或jQuery修改任何其他元素都没有问题,但在尝试修改:before选项卡中的元素时似乎遇到了问题

举例来说,我似乎无法将下面的:before元素的left属性设置为200

我的css:

#buttonBox {
    position: absolute;
    width:150px;
    z-index:10;
    left:298px;
    top: 130px;
}

#buttonBox:before {
    position: absolute;
    content: "";
    top: -8px;
    left: 80px;
    margin-left: -8px;  
    border-bottom: 8px solid #ddd;
    border-left: 8px solid transparent;
    border-right: 8px solid transparent;        
    border-top: 0;
    border-bottom-color: #1e2227; 
}
在javascript中:

document.getElementById("#buttonBox:before")
结果为空,因此无法设置该值

jQuery:

$("#buttonBox:before").offset({top: -8, left: 200});
在设置left属性时同样没有响应


关于如何修改伪元素的属性,我缺少什么吗?我在谷歌上搜索这一个没有任何运气。

你不能用JQuery修改伪元素。使用类来操作它们的CSS属性。例如:

#buttonBox.active:before {
   top: -8px;        
   left: 200px;
}

.active类将在必要时通过Javascript应用。

不能使用JQuery修改伪元素。使用类来操作它们的CSS属性。例如:

#buttonBox.active:before {
   top: -8px;        
   left: 200px;
}

.active类将在必要时通过Javascript应用。

也许您可以在jQuery中使用prev函数


也许您可以在jQuery中使用prev函数

您可以通过JS修改:before和:after,但这已经够烦人了,您可能不应该这样做

为此,您需要使用相同的选择器,并手动向包含新样式的网页标题添加新样式元素:

$('<style type="text/css">#buttonBox:before { left: 200px; top: -8px; }</style>').appendTo('head');
伪元素实际上不是DOM元素,因此是伪元素。除了添加/删除样式表之外,JavaScript无法访问它们。

您可以通过JS修改:before和:after,但这已经够烦人了,您可能不应该这样做

为此,您需要使用相同的选择器,并手动向包含新样式的网页标题添加新样式元素:

$('<style type="text/css">#buttonBox:before { left: 200px; top: -8px; }</style>').appendTo('head');

伪元素实际上不是DOM元素,因此是伪元素。除了添加/删除样式表之外,JavaScript无法访问它们。

,明白。接下来,:before元素在我的盒子顶部创建了一个小克拉,其中包含一个可变宽度的列表。我想把克拉直接放在那个盒子的顶部。比如:$origins:before.offset{top:-8,left:$origins.width/2}。据我所知,这在javascript或jquery中都是不可能的,因为要使用类,您必须事先知道要为left设置什么值。对吗?澄清。如果在中间,这将是一个简单的左:50%。但如果我点击屏幕两侧附近的对象,我还需要能够在侧面放置。我已经确定,如果不去掉:before元素并使其成为兄弟元素,就不可能做到这一点。谢谢你的帮助=是的,你说得对。如果有一些逻辑来计算边对顶,那就更复杂了。但是,可以应用两个类:.top和.side。每个将修改:before元素并切换位置。这样,逻辑将保留在Javascript中,而显示将保留在CSS.0中。接下来,:before元素在我的盒子顶部创建了一个小克拉,其中包含一个可变宽度的列表。我想把克拉直接放在那个盒子的顶部。比如:$origins:before.offset{top:-8,left:$origins.width/2}。据我所知,这在javascript或jquery中都是不可能的,因为要使用类,您必须事先知道要为left设置什么值。对吗?澄清。如果在中间,这将是一个简单的左:50%。但如果我点击屏幕两侧附近的对象,我还需要能够在侧面放置。我已经确定,如果不去掉:before元素并使其成为兄弟元素,就不可能做到这一点。谢谢你的帮助=是的,你说得对。如果有一些逻辑来计算边对顶,那就更复杂了。但是,可以应用两个类:.top和.side。每个将修改:before元素并切换位置。这样,逻辑就停留在Javascript中,而显示则停留在CSS中。