javascript - 如何从相对 URL 获取 Css 背景图像 URL 文本?

标签 javascript css background-image

我想获取背景图像 URL 的文本。 期望输出:

123
http://123.com
 (It is empty)

但实际输出:

$('#p1').html($('#bg1').css('background-image').replace('url(','').replace(')','').replace(/\"/gi, ""));
$('#p2').html($('#bg2').css('background-image').replace('url(','').replace(')','').replace(/\"/gi, ""));
$('#p3').html($('#bg3').css('background-image').replace('url(','').replace(')','').replace(/\"/gi, ""));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a href="/1" id="bg1" style="background-image: url('123');"></a>
<p id="p1"></p>
<a href="/2" id="bg2" style="background-image: url('http://123.com');"></a>
<p id="p2"></p>
<a href="/3" id="bg3" style="background-image: url('');"></a>
<p id="p3"></p>

我知道这个功能可以通过操作字符串来实现。

还有其他办法吗?

我知道这个 css 不是规范,但我想编写 GreaseMonkey UserScript 来破解其他网站。

已解决:

这个 style.backgroundImage 救了我!谢谢!

$.fn.extend({
    getBackgroundUrl: function () {
        let imgUrls = [];
        $(this).each(function (index, ele) {
            let bgUrl = ele.style.backgroundImage || 'url("")';
            bgUrl = bgUrl.match(/url\((['"])(.*?)\1\)/)[2];
            imgUrls.push(bgUrl);
        });
        return imgUrls.length === 1 ? imgUrls[0] : imgUrls;
    }
});
    
$('p').html($('a').getBackgroundUrl().join(','));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a href="/1" id="bg1" style="background-image: url('123');"></a>
<a href="/2" id="bg2" style="background-image: url('http://123.com');"></a>
<a href="/3" id="bg3" style="background-image: url('');"></a>
<p></p>

最佳答案

使用单个正则表达式可以更轻松地做到这一点:匹配 url 和左括号,捕获 单引号或双引号,然后捕获并延迟-重复字符,直到到达下一个单引号或双引号:

const getUrl = str => str.match(/url\((['"])(.*?)\1\)/)[2];
$('a').each((_, a) => console.log(getUrl(a.style.backgroundImage)));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a href="/1" id="bg1" style="background-image: url('123');"></a>
<p id="p1"></p>
<a href="/2" id="bg2" style="background-image: url('http://123.com');"></a>
<p id="p2"></p>
<a href="/3" id="bg3" style="background-image: url('');"></a>
<p id="p3"></p>

不需要像 jQuery 这样的大型库来选择元素,您也可以在 vanilla JS 中轻松完成:

const getUrl = str => str.match(/url\((['"])(.*?)\1\)/)[2];
document.querySelectorAll('a').forEach((a) => {
  console.log(getUrl(a.style.backgroundImage));
});
<a href="/1" id="bg1" style="background-image: url('123');"></a>
<p id="p1"></p>
<a href="/2" id="bg2" style="background-image: url('http://123.com');"></a>
<p id="p2"></p>
<a href="/3" id="bg3" style="background-image: url('');"></a>
<p id="p3"></p>

关于javascript - 如何从相对 URL 获取 Css 背景图像 URL 文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731892/

相关文章:

javascript - 获取当前元素的索引并改变他的样式

javascript - Jquery DataTable 列宽问题

css - 自举 |我无法在我的站点中获取背景图片

html - 背景覆盖属性未按预期工作

html - html z-index 中的图像标签可以位于 css 背景图像后面吗?

javascript - 如何禁用或隐藏 intro.js 中特定步骤的按钮?

JavaScript 不运行第一个代码(document.get)下面的代码

javascript - 带有 JavaScript 文件的 HTML 无法在 WPF 应用程序内的 WebView2 上运行

html - 删除 HTML 电子邮件中表格行之间的间距

html - 如何将列表项与 vuetify (1.5) 对齐