Tôi có một nút trong đó khi tôi nhấp vào, tôi muốn cảnh báo URL hình nền của #div1
.Tôi có thể nhận url hình nền của div không?
Có thể không?
Tôi có một nút trong đó khi tôi nhấp vào, tôi muốn cảnh báo URL hình nền của #div1
.Tôi có thể nhận url hình nền của div không?
Có thể không?
Tôi thường thích .replace()
để biểu thức thông thường khi có thể, vì nó thường dễ dàng hơn để đọc: http://jsfiddle.net/mblase75/z2jKA/2
$("div").click(function() {
var bg = $(this).css('background-image');
bg = bg.replace('url(','').replace(')','').replace(/\"/gi, "");
alert(bg);
});
Vâng, đó là có thể:
$("#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);
});
Tôi muốn cảnh báo rằng không đặt nó. Cảnh báo hoặc viết đường dẫn trên console.log – jQuerybeast
và bị đánh bại bởi 55 giây .. – redDevil
để viết trên bảng điều khiển thử: console.log ($ ('# div1'). Css ('background-image')) –
Như đã đề cập, Blazemongers giải pháp được không xóa dấu ngoặc kép (ví dụ: trả lại bằng Firefox). Kể từ khi tôi tìm thấy Rob Ws giải pháp là khá phức tạp, thêm 2 cent tôi ở đây:
$('#div1').click (function(){
url = $(this).css('background-image').replace(/^url\(['"]?/,'').replace(/['"]?\)$/,'');
alert(url);
})
tôi đã cải thiện đôi chút câu trả lời, mà xử lý các định nghĩa CSS mở rộng như:
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))
mã JavaScript:
var bg = $("div").css("background-image")
bg = bg.replace(/.*\s?url\([\'\"]?/, '').replace(/[\'\"]?\).*/, '')
Kết quả:
"http://d36xtkk24g8jdx.cloudfront.net/bluebar/359de8f/images/shared/noise-1.png"
Tôi đang sử dụng này một
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
}
Hoạt động tốt. Cảm ơn! – IndikatorDesign
Tôi nghĩ rằng việc sử dụng một biểu thức chính quy cho việc này là bị lỗi chủ yếu là do
Kể từ khi url (" và ") thành phần là hằng số, cắt chuỗi của bạn như vậy:
$("#id").click(function() {
var bg = $(this).css('background-image').trim();
var res = bg.substring(5, bg.length - 2);
alert(res);
});
Trông giống như một giải pháp tốt. Nhưng điều này không hoạt động trong Safari. Với phương pháp này, bạn nhận được "ttps: //.....jp" thay vì "https: //.....jpg" .. – IndikatorDesign
Tôi tin rằng '' 's là tùy chọn trong cú pháp này. myimg.jpg) 'hoạt động tốt ở đây. –
Sử dụng chỉ một cuộc gọi đến replace
(regex phiên bản): var bgUrl = $('#element-id').css('background-image').replace(/url\(("|')(.+)("|')\)/gi, '$2');
Dưới đây là một regex đơn giản sẽ xóa url("
và ")
khỏi chuỗi được trả về.
var css = $("#myElem").css("background-image");
var img = css.replace(/(?:^url\(["']?|["']?\)$)/g, "");
Điều gì sẽ xảy ra nếu URL hình nền giống như url của url (% 20 của tôi) 20% bản sao \ (1 \) .jpg) '? Thay thế của bạn khiến biến bg là 'my% 20picture% 20Copy \ (1 \ .jpg)'. Nó cũng không loại bỏ trích dẫn (ví dụ: 'url (" the picture.jpg ")'). –
Sau đó, bạn sẽ phải thêm một số mã để thoát khỏi '% 20' và dấu ngoặc đơn hoặc tự hỏi mình liệu bạn có thực sự cần chúng ở vị trí đầu tiên không. Nếu trích dẫn trong một vấn đề, thay vào đó hãy sử dụng giải pháp của [RobW] (http://stackoverflow.com/a/8809891/901048). – Blazemonger
cảm ơn liên kết jsfiddle của bạn! – AmirModiri