div의 배경 이미지 URL을 얻을 수 있습니까?


답변:


190

보통 .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);
    });

4
배경 이미지 URL이 다음과 같으면 어떻게 url(my%20picture%20Copy\(1\).jpg)합니까? 대체하면 bg 변수가 my%20picture%20Copy\(1\.jpg). 또한 인용 부호를 제거하지 않습니다 (예 :) url("the picture.jpg").
Benjamin Manns 2013

1
그런 다음 일부 코드를 추가하여 %20및 괄호를 이스케이프 해제 하거나 처음부터 실제로 필요한지 자문해야합니다. 문제를 인용하는 경우 대신 RobW 의 솔루션을 사용하십시오.
Blazemonger 2013

1
가능성으로 여러 배경 이미지를 처리하지 않습니다.
마르셀

1
이미지 만 있으면 @Marcel Easy; 문자열을 쉼표로 나누십시오. 거기에 선형 그래디언트 와 같은 것이 있으면 쉼표도 있기 때문에 더 까다 롭습니다 .
Blazemonger 2014-08-15

1
배경 이미지가 같은 경우이 작동하지 않습니다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")
glasspill

52

예, 가능합니다.

$("#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에 경고 또는 경로 작성
jQuerybeast

콘솔에 쓰기 시도 : console.log ($ ( '# div1'). css ( 'background-image'))
Mandeep Pasbola

@RobW 감사합니다. 도메인 대신 url (google.com)을 인쇄합니다
jQuerybeast

@jQuerybeast 내 코드가 CSS를 설정하지 않습니다. 이 .css메서드는 하나의 인수로 호출 될 때 속성 값을 반환합니다.
Rob W

2
@tim 아니요, 더 정확합니다. 상상 : background-image: url('photo(2012).png');코드의 당신의 비트와 함께, 당신은 분명 잘못 " '(2012.png) 사진'", 얻을 것이다.
Rob W '

21

다음과 같은 확장 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))

자바 스크립트 코드 :

var bg = $("div").css("background-image")
bg = bg.replace(/.*\s?url\([\'\"]?/, '').replace(/[\'\"]?\).*/, '')

결과:

"http://d36xtkk24g8jdx.cloudfront.net/bluebar/359de8f/images/shared/noise-1.png"

background-image가 background-image : linear-gradient (rgba (0,0,0,0.2), rgba (0,0,0,0.4)), url ( " mdn.mozillademos 와 같은 경우에는 작동하지 않습니다. .org / files / 7693 / catfront.png " )
glasspill

10

이미 언급했듯이 Blazemongers 솔루션은 따옴표를 제거하지 못합니다 (예 : Firefox에서 반환 됨). Rob Ws 솔루션이 다소 복잡하다는 것을 알았으므로 여기에 2 센트를 추가합니다.

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

6

나는 이것을 위해 정규 표현식을 사용하는 것이 주로 결함이 있다고 생각합니다.

  • 작업의 단순성
  • 정규식을 실행하는 것은 항상 문자열을 자르는 것보다 CPU 집약적이거나 더 길다.

때문에 ( "URL") 구성 요소가 일정하므로처럼 문자열을 잘라 :

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

좋은 해결책 인 것 같습니다. 그러나 이것은 Safari에서 작동하지 않습니다. 대신이 방법을 사용하면 "//.....jp ttps"GET "은 https : //.....jpg"..
IndikatorDesign

"이 구문에서 s는 선택 사항 이라고 생각 합니다. url(myimg.jpg)여기서 잘 작동합니다.
아브라함 Murciano Benzadon

5

나는 이것을 사용하고있다

  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
  }

1
잘 작동합니다. 감사!
IndikatorDesign 2017 년

4

여기를 제거하는 간단한 정규식입니다 url("")반환 된 문자열에서이.

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

1

replace(정규 버전)에 대한 한 번의 호출 사용 : var bgUrl = $('#element-id').css('background-image').replace(/url\(("|')(.+)("|')\)/gi, '$2');

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.