2010-02-02 29 views
41

Próbuję zmienić atrybut obraz src za pomocą jQueryJak ustawić src obrazu przy użyciu jQuery

jQuery("#imageID").attr('src','http://localhost:8080/images/1/myImage.png'); 

stosując powyższy kod mogę zmienić atrybut src, ale gdy próbuję to: -

jQuery("#imageID").attr('src',jQuery("#imageBlock").css('background-image')); 

Nie mogę zmienić src.

warunkiem

alert (jQuery("#imageBlock").css('background-image')); 

Powroty:

url (http://localhost:8080/images/1/myImage.png)

Edit # 1 właśnie wtedy, kiedy miał przyjąć rozwiązanie. Muszę powiedzieć, że prawie wszystkie rozwiązania działały w FF. Próbowałem:

  • plaster (4, -1);
  • split ("(") [1]> następnie zastąp (")", "");

Sądzę, że inni też będą działać. Ale żadne z rozwiązań nie działa w IE. Powodem jest: podczas FF powraca:

url (http://localhost:8080/images/1/myImage.png)

IE Zwraca:

url ("http://localhost:8080/images/1/myImage.png")

^^ przeszkadza tutaj:

Teraz, jaki może być ogólny sposób ustawiania src attr. Czy muszę przetestować przeglądarkę, czy jest to IE czy nie?

To działa kod.

var src = ""; 
    if (jQuery.browser.msie) { 
     src = jQuery("#imageBlock").css('background-image').slice(5,-2);   
    }else{ 
     src = jQuery("#imageBlock").css('background-image').slice(4,-1); 
    } 
    jQuery("#imageID").attr('src', src); 

Naprawdę tego nie lubię: x. Jeśli istnieje inne rozwiązanie niż to, proszę dać mi znać, inaczej odbiorę natychmiast rozwiązanie slice.

+0

[To] [1] jest proste i do momentu. [1]: http://stackoverflow.com/questions/18867735/how-to-change-image-attrsrc-using-jquery –

Odpowiedz

34

IMO slice jest bardziej odpowiednia niż substring lub replace. Spróbuj tego:

jQuery("#imageID").attr(
    'src', 
    jQuery("#imageBlock").css('background-image').slice(4,-1) 
); 

Tutaj jesteś krojenie ciąg pomiędzy url( i ). Szczegółowe informacje na temat metody można znaleźć w MDC pod numerem slice.

+0

to będzie działać w IE? –

+1

@Rakesh Juyal: Tak. Właściwie sam koduję 95% w IE. Metoda wycinków jest zdefiniowana w trzeciej edycji ECMAScript i znajduje się w witrynie MSDN: http://msdn.microsoft.com/en-us/library/6w1bzf9f(VS.85).aspx. –

0

Musisz rozebrać części url( i zamknąć ), aby działały.

Więc url(http://localhost:8080/images/1/myImage.png)

staje

http://localhost:8080/images/1/myImage.png

Można to zrobić z podciągu, regex zastąpić lub jakakolwiek metoda wyboru.

http://www.w3schools.com/jsref/jsref_replace.asp

Może:

jQuery("#imageID").attr('src',jQuery("#imageBlock").css('background-image').replace('url(','').replace(')',''))

2

Dzieje się tak dlatego, że ciąg url() jest owinięty wokół niego. trzeba rozebrać go z łańcucha, na przykład za pomocą funkcji Replace ...

var bgimg = jQuery("#imageBlock").css('background-image').replace('url(', ''); 
bgimg.replace(')', ''); 
7

trzeba wyodrębnić część URL:

var backgroundImage = $("#imageBlock") 
    .css('backgroundImage') 
    .replace(/"/g,"") 
    .replace(/url\(|\)$/ig, ""); 
jQuery("#imageID").attr('src', backgroundImage); 
+0

btw, jest to 'replace (/ url \ (| \) $/ig," ";; –

+0

Zastępuje część url() ciągu znaków" ", aby uzyskać lokalizację obrazu na jego posiadać. –

+0

Czy usunięcie "" jest konieczne? Zawsze myślałem, że przeglądarka zwróciła sparsowaną reprezentację ciągu url, który jest bez cudzysłowów? Ponadto, jeśli się mylę, nie powinno być wyrażenie regularne '/ [" ']/g'? –

Powiązane problemy