在CSS伪元素中查找/替换内容

问题描述 投票:0回答:2

[试图查找某些文本,这些文本由“:before”伪元素产生。

然后,我想更改该内容的CSS。

这甚至可能吗?这就是我所拥有的。

谢谢。

var $test = $('.test').html();
$test = $test.replace(/one/gi, '<span class="red">one</span>');
$test = $test.replace(/two/gi, '<span class="green">two</span>');
$test = $test.replace(/three/gi, '<span class="blue">three</span>');
$('.test').html($test);
.test:before { content: 'one two three';}

.red {color: red;}
.green {color: green;}
.blue {color: blue;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="test"></div>

这里是fiddle

css css-selectors pseudo-element
2个回答
0
投票

如果只想替换带有一些html元素的内容。您可以尝试这种方式

var $test = $('.test');

// clear :before content data
$test.attr('data-before', '');

$test.append('<span class="red">one</span>');
$test.append('<span class="green">two</span>');
$test.append('<span class="blue">three</span>');
.test:before { content: attr(data-before);}

.red {color: red;}
.green {color: green;}
.blue {color: blue;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="test" data-before="one two three"></div>

似乎是被黑客入侵。因为我们实际上没有replace任何东西,所以只显示和隐藏内容。


0
投票

如注释中所述,您不能将HTML放在伪元素的内容内,但是可以使用and属性设置其内容,然后可以将该属性作为样式目标:

.test:before {
  content: attr(data-content);
}

.test[data-content="red"]:before {
  color: red;
}
  
.test[data-content="green"]:before {
  color: green;
}
<div class="test" data-content="red"></div>
<div class="test" data-content="green"></div>

这是我能想到的唯一解决方法,当然,您可以使用javascript更改data-content属性,它的工作原理完全相同(您只需要在CSS中设置一个具有样式的值即可)

© www.soinside.com 2019 - 2024. All rights reserved.