【问题标题】:Can I get div's background-image url?我可以获取 div 的背景图片 url 吗?
【发布时间】:2023-03-15 17:19:01
【问题描述】:

我有一个按钮,当我单击它时,我想提醒#div1background-image URL。

有可能吗?

【问题讨论】:

标签: jquery url html background-image


【解决方案1】:

我的两分钱。
如果 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

【讨论】:

    【解决方案2】:

    这是一个简单的正则表达式,它将从返回的字符串中删除 url("")

    var css = $("#myElem").css("background-image");
    var img = css.replace(/(?:^url\(["']?|["']?\)$)/g, "");
    

    【讨论】:

      【解决方案3】:

      只需调用一次replace(正则表达式版本): var bgUrl = $('#element-id').css('background-image').replace(/url\(("|')(.+)("|')\)/gi, '$2');

      【讨论】:

        【解决方案4】:

        我认为为此使用正则表达式是错误的,主要是由于

        • 任务的简单性
        • 运行正则表达式总是比剪切字符串更占用 CPU/时间更长。

        由于 url("") 组件是恒定的,因此修剪你的字符串:

        $("#id").click(function() {
             var bg = $(this).css('background-image').trim();
             var res = bg.substring(5, bg.length - 2);
             alert(res);
        });
        

        【讨论】:

        • 看起来是个不错的解决方案。但这在 Safari 中不起作用。使用这种方法,您会得到“ttps://.....jp”而不是“https://.....jpg”..
        • 我相信"s 在这种语法中是可选的。 url(myimg.jpg) 在这里工作正常。
        【解决方案5】:

        如果可能,我通常更喜欢 .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 类似于 url(my%20picture%20Copy\(1\).jpg) 怎么办?您的替换导致 bg 变量为my%20picture%20Copy\(1\.jpg)。它也不会去除引用(例如url("the picture.jpg"))。
        • 那么您要么必须添加一些代码来取消转义%20 和括号,要么首先问问自己是否真的需要它们。如果引用问题,请改用RobW 的解决方案。
        • 不可能处理多个背景图像。
        • @Marcel Easy,如果你只有图片的话;只需用逗号分隔字符串。如果你有像linear gradients 这样的东西,那就更麻烦了,因为它们也有逗号。
        • 如果背景图像类似于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"),这将不起作用
        【解决方案6】:

        我在用这个

          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
          }
        

        【讨论】:

        • 工作正常。谢谢!
        【解决方案7】:

        我稍微改进了答案,它可以处理扩展的 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"
        

        【讨论】:

        【解决方案8】:

        如前所述,Blazemongers 解决方案无法删除引号(例如由 Firefox 返回)。由于我发现 Rob Ws 的解决方案相当复杂,所以在这里添加我的 2 美分:

        $('#div1').click (function(){
          url = $(this).css('background-image').replace(/^url\(['"]?/,'').replace(/['"]?\)$/,'');
          alert(url);
        })
        

        【讨论】:

          【解决方案9】:

          是的,这是可能的:

          $("#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);
          });
          

          【讨论】:

          • 我想提醒它不要设置它。警告或在console.log上写路径
          • 在控制台上写试试:console.log($('#div1').css('background-image'))
          • @RobW 谢谢。打印 url(google.com) 而不仅仅是域
          • @jQuerybeast 我的代码没有设置 CSS。 .css 方法在使用一个参数调用时返回属性的值。
          • @tim 不,它只是更准确。想象一下:background-image: url('photo(2012).png'); 用你的一点代码,你会得到“'photo(2012.png')”,这显然是不正确的。
          猜你喜欢
          • 1970-01-01
          • 2018-10-23
          • 2020-08-12
          • 1970-01-01
          • 1970-01-01
          • 2010-09-30
          • 2011-05-15
          • 1970-01-01
          相关资源
          最近更新 更多