javascript - 如何使用 JQuery 替换 CSS 背景图片并保持渐变?

标签 javascript jquery html css background-image

我正在尝试动态替换 divbackground-image 属性,同时使用 jQuery 的 维护其他与背景相关的属性(例如颜色和渐变) .css() 函数。到目前为止,我可以替换图像,但后来我失去了其他属性。如何在不丢失其他 CSS 背景属性的情况下执行此操作?

CSS

.myClass{
    width:100px;
    height:100px;
    background:url(http://upload.wikimedia.org/wikipedia/commons/b/b9/Hookem_hand.gif) center no-repeat, repeating-linear-gradient(135deg, transparent, transparent 3px, rgb(102, 102, 102) 3px, rgb(102, 102, 102) 6px), linear-gradient(rgb(51, 51, 51), rgb(153, 153, 153));
    color:white;
    text-align:center;
}

JS/JQuery
var elem = $("#changeMe");
var pattern = new RegExp(/url\(https?:[^,]*\)/);
var background = elem.css("background");
var replacementImage = "url(http://upload.wikimedia.org/wikipedia/commons/d/d1/Circle-question.png)";

var match = background.match(pattern);
console.log(match);

var updatedBG = background.replace(pattern,replacementImage);
console.log(updatedBG);

// elem.css({"background-image":replacementImage}); //this removes the other backgroud css such as gradient and color
elem.css({"background":updatedBG}); //this does not have any effect on the div

HTML

<div class="myClass">
    unchanged
</div>
<div id="changeMe" class="myClass">
    changed
</div>

我有一个 JSFiddle 演示正在发生的事情:http://jsfiddle.net/joedegiovanni/2ns61st9/4/

有没有办法正确执行此操作,以免其他背景属性丢失?我不确定为什么这不起作用。

提前感谢您的帮助。

最佳答案

这是您的 jsfiddle 的更新版本。

http://jsfiddle.net/2ns61st9/5/ 1

我不知道你为什么需要那个正则表达式,但是当你使用正则表达式模式时它会弄乱变量的值。

看看我的修改。

主要问题是背景图像和背景图案使用相同的 css 属性,因此当您替换属性的值时,您会杀死背景图案。

如您所见,我基本上将该背景图案添加到一个附加变量中,然后我将两者合并在一起。然后我设置背景图像属性。

在这个例子中是有效的。如果这对您有用,请告诉我!

没有创建额外的 css 类,我只是稍微修改了你的。

这是CSS

.myClass{
    width:100px;
    height:100px;
    background-image: url(http://upload.wikimedia.org/wikipedia/commons/b/b9/Hookem_hand.gif),repeating-linear-gradient(135deg, transparent, transparent 3px, rgb(102, 102, 102) 3px, rgb(102, 102, 102) 6px), linear-gradient(rgb(51, 51, 51), rgb(153, 153, 153));
    color:white;
    text-align:center;
    position: relative;
    background-repeat: no-repeat;
    background-position: center center;
    background-color: transparent;
}

这是HTML

<div class="myClass">
    unchanged
</div>
<div id="changeMe" class="myClass">
    changed
</div>

这是 JQuery

var elem = $("#changeMe");
var pattern = new RegExp(/url\(https?:[^,]*\)/);
var background = elem.css("background");
var replacementImage = "url(http://upload.wikimedia.org/wikipedia/commons/d/d1/Circle-question.png)";
var bgpattern = ", repeating-linear-gradient(135deg, transparent, transparent 3px, rgb(102, 102, 102) 3px, rgb(102, 102, 102) 6px), linear-gradient(rgb(51, 51, 51), rgb(153, 153, 153))";

var match = background.match(pattern);
console.log(match);

var updatedBG = background.replace(pattern,replacementImage);
console.log(updatedBG);

replacementImage = replacementImage + bgpattern;

elem.css("background-image", replacementImage);

关于javascript - 如何使用 JQuery 替换 CSS 背景图片并保持渐变?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25649735/

相关文章:

javascript - 将 ng-model 值设置为 div 文本

javascript - Safari 浏览器的网络摄像头支持

jquery - 以编程方式选择和加载 jquery 选项卡

带有绝对位置的 HTML 打印

html - 我想在我的网页末尾用 HTML 和 CSS 设置 "privacy policy"

javascript - jQuery Masonry 更新不同断点处的列宽

javascript - 如何将多个 onError 函数分配给一个 Promise(由 Angular 的 $http.post 返回)

javascript - 使用 Slidetoggle 时如何在各个跨度的类之间切换?

javascript - 如何使用数组在 div 上按顺序获取颜色

html - 文件布局和 Assets 链接?