【发布时间】:2023-03-15 17:19:01
【问题描述】:
我有一个按钮,当我单击它时,我想提醒#div1 的background-image URL。
有可能吗?
【问题讨论】:
-
这能回答你的问题吗? Get URL from background-image Property
标签: jquery url html background-image
我有一个按钮,当我单击它时,我想提醒#div1 的background-image URL。
有可能吗?
【问题讨论】:
标签: jquery url html background-image
我的两分钱。
如果 background-image 属性在 CSS 中被 background 属性覆盖,则这些解决方案都不起作用。
假设您设置了 background-image 属性并且您不想在浏览器中看到它,您只需要出于某种目的在 jQuery 中获取该值。
所以,如果你有这样的事情:
<div class="myDivWithBackground">
<p>Lorem Ipsum</p>
</div>
<style>
.myDivWithBackground{
background-image: URL('url-here.jpg')
}
div.myDivWithBackground{
background: #fff!important
}
</style>
然后$('div').css('background-image'); 返回 none 而不是 URL。
如果您需要将 background 保持为白色,并且还需要在 jQuery 中获取 background-image URL 值,请替换 伪元素的strong>背景,像这样:
<style>
.myDivWithBackground{
background-image: URL('url-here.jpg')
}
div.myDivWithBackground:after{
content: '';
display: block;
width: 100%;
height: 100%;
background: #fff;
top: 0;
position: absolute;
}
div.myDivWithBackground p{
position: relative;
z-index: 9999;
}
</style>
现在 $('div').css('background-image'); 返回 URL('url-here.jpg') 而不是 none。
【讨论】:
这是一个简单的正则表达式,它将从返回的字符串中删除 url(" 和 ")。
var css = $("#myElem").css("background-image");
var img = css.replace(/(?:^url\(["']?|["']?\)$)/g, "");
【讨论】:
只需调用一次replace(正则表达式版本):
var bgUrl = $('#element-id').css('background-image').replace(/url\(("|')(.+)("|')\)/gi, '$2');
【讨论】:
我认为为此使用正则表达式是错误的,主要是由于
由于 url(" 和 ") 组件是恒定的,因此修剪你的字符串:
$("#id").click(function() {
var bg = $(this).css('background-image').trim();
var res = bg.substring(5, bg.length - 2);
alert(res);
});
【讨论】:
"s 在这种语法中是可选的。 url(myimg.jpg) 在这里工作正常。
如果可能,我通常更喜欢 .replace() 而不是正则表达式,因为它通常更容易阅读:http://jsfiddle.net/mblase75/z2jKA/2
$("div").click(function() {
var bg = $(this).css('background-image');
bg = bg.replace('url(','').replace(')','').replace(/\"/gi, "");
alert(bg);
});
【讨论】:
url(my%20picture%20Copy\(1\).jpg) 怎么办?您的替换导致 bg 变量为my%20picture%20Copy\(1\.jpg)。它也不会去除引用(例如url("the picture.jpg"))。
%20 和括号,要么首先问问自己是否真的需要它们。如果引用问题,请改用RobW 的解决方案。
background-image:linear-gradient(rgba(0,0,0,0.2), rgba(0,0,0,0.4)), url("https://mdn.mozillademos.org/files/7693/catfront.png"),这将不起作用
我在用这个
function getBackgroundImageUrl($element) {
if (!($element instanceof jQuery)) {
$element = $($element);
}
var imageUrl = $element.css('background-image');
return imageUrl.replace(/(url\(|\)|'|")/gi, ''); // Strip everything but the url itself
}
【讨论】:
我稍微改进了答案,它可以处理扩展的 CSS 定义,例如:
background-image: url(http://d36xtkk24g8jdx.cloudfront.net/bluebar/359de8f/images/shared/noise-1.png), -webkit-linear-gradient(top, rgb(81, 127, 164), rgb(48, 96, 136))
JavaScript 代码:
var bg = $("div").css("background-image")
bg = bg.replace(/.*\s?url\([\'\"]?/, '').replace(/[\'\"]?\).*/, '')
结果:
"http://d36xtkk24g8jdx.cloudfront.net/bluebar/359de8f/images/shared/noise-1.png"
【讨论】:
如前所述,Blazemongers 解决方案无法删除引号(例如由 Firefox 返回)。由于我发现 Rob Ws 的解决方案相当复杂,所以在这里添加我的 2 美分:
$('#div1').click (function(){
url = $(this).css('background-image').replace(/^url\(['"]?/,'').replace(/['"]?\)$/,'');
alert(url);
})
【讨论】:
是的,这是可能的:
$("#id-of-button").click(function() {
var bg_url = $('#div1').css('background-image');
// ^ Either "none" or url("...urlhere..")
bg_url = /^url\((['"]?)(.*)\1\)$/.exec(bg_url);
bg_url = bg_url ? bg_url[2] : ""; // If matched, retrieve url, otherwise ""
alert(bg_url);
});
【讨论】:
.css 方法在使用一个参数调用时返回属性的值。
background-image: url('photo(2012).png'); 用你的一点代码,你会得到“'photo(2012.png')”,这显然是不正确的。