Tengo un botón del cual cuando hago clic en él quiero alertar a la background-image
URL #div1
.
¿Es posible?
jquery
url
html
background-image
jQuerybeast
fuente
fuente
Respuestas:
Por lo general, prefiero
.replace()
las expresiones regulares cuando es posible, ya que a menudo es más fácil de leer: http://jsfiddle.net/mblase75/z2jKA/2$("div").click(function() { var bg = $(this).css('background-image'); bg = bg.replace('url(','').replace(')','').replace(/\"/gi, ""); alert(bg); });
fuente
url(my%20picture%20Copy\(1\).jpg)
? Su reemplazo hace que la variable bg seamy%20picture%20Copy\(1\.jpg)
. Tampoco elimina las citas (por ejemplourl("the picture.jpg")
).%20
paréntesis y, o preguntarse si realmente los necesitaba allí en primer lugar. Si cita un problema, utilice la solución de RobW en su lugar.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")
Sí, eso es posible:
$("#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); });
fuente
.css
método devuelve el valor de una propiedad, cuando se invoca con un argumento.background-image: url('photo(2012).png');
con su fragmento de código, obtendrá "'foto (2012.png')", que obviamente es incorrecta.He mejorado ligeramente la respuesta, que maneja definiciones CSS extendidas como:
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))
Código JavaScript:
var bg = $("div").css("background-image") bg = bg.replace(/.*\s?url\([\'\"]?/, '').replace(/[\'\"]?\).*/, '')
Resultado:
"http://d36xtkk24g8jdx.cloudfront.net/bluebar/359de8f/images/shared/noise-1.png"
fuente
Como ya se mencionó, la solución de Blazemongers no elimina las comillas (por ejemplo, las devuelve Firefox). Como encuentro que la solución de Rob Ws es bastante complicada, agrego mis 2 centavos aquí:
$('#div1').click (function(){ url = $(this).css('background-image').replace(/^url\(['"]?/,'').replace(/['"]?\)$/,''); alert(url); })
fuente
Creo que usar una expresión regular para esto es defectuoso principalmente debido a
Dado que los componentes url (" y ") son constantes, recorta tu cadena así:
$("#id").click(function() { var bg = $(this).css('background-image').trim(); var res = bg.substring(5, bg.length - 2); alert(res); });
fuente
"
s son opcionales en esta sintaxis.url(myimg.jpg)
funciona bien aquí.Estoy usando este
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 }
fuente
Aquí hay una expresión regular simple que eliminará el
url("
y")
de la cadena devuelta.var css = $("#myElem").css("background-image"); var img = css.replace(/(?:^url\(["']?|["']?\)$)/g, "");
fuente
Usando solo una llamada a
replace
(versión regex):var bgUrl = $('#element-id').css('background-image').replace(/url\(("|')(.+)("|')\)/gi, '$2');
fuente