为jQuery .css()赋值创建字符串

gywdnpxw  于 2023-10-17  发布在  jQuery
关注(0)|答案(2)|浏览(133)

我试图将下面的css分配给一个元素,但它没有将css分配给该元素。这是最好的方法吗不知道我做错了什么。

var col1 = "#616161";
var col2 = "#ffffff";
var cssStr = '"background": "linear-gradient(180deg, '+col+', '+col2+')", "background-clip": "text", "-webkit-text-fill-color": "transparent"';
console.log("CssStr: " + cssStr);
$(this).css({cssStr})

在控制台日志中:

CssStr: "background": "linear-gradient(180deg, #616161, #ffffff)", "background-clip": "text", "-webkit-text-fill-color": "transparent"
fae0ux8s

fae0ux8s1#

不能通过将属性的字符串表示形式放在{}中来创建对象。只需直接创建对象,并将变量替换为其中一个属性值。替换变量的最简单方法是使用模板文字而不是串联。

var css = {
    "background": `linear-gradient(180deg, ${col}, ${col2})`, 
    "background-clip": "text", 
    "-webkit-text-fill-color": "transparent"
};

$(this).css(css);
wpcxdonn

wpcxdonn2#

您正在尝试将字符串转换为对象,并将对象传递给.css()。你不能做前者,你应该把键值对传递给后者。我已经注解掉了你的第二条规则,因为在这个小提琴中,它阻止了任何图形的显示:

var col1 = "#616161";
var col2 = "#ffffff";
var cssStr = {
    "background": "linear-gradient(180deg, "+col1+", "+col2+")", 
    /*"background-clip": "text",*/
    "-webkit-text-fill-color": "transparent"
};
let context = $("#abc");
Object.keys(cssStr).map(item => context.css(item, cssStr[item]));
#abc {
    width: 200px;
    height: 200px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="abc"></div>

相关问题