我如何获得jQuery的背景图像大小?
问题很简单。 我如何在jQuery中获得div的背景图像大小(宽度和高度)。 这甚至有可能吗? 我认为这将工作:
jQuery('#myDiv').css('background-image').height();
我得到的错误消息是这不是一个函数。
你将不得不做这样的事情:
var url = $('#myDiv').css('background-image').replace('url(', '').replace(')', '').replace("'", '').replace('"', ''); var bgImg = $('<img />'); bgImg.hide(); bgImg.bind('load', function() { var height = $(this).height(); alert(height); }); $('#myDiv').append(bgImg); bgImg.attr('src', url);
由于代码的简单性,您不能在背景图片的url中使用圆括号或引号。 但是,代码可以扩展以获得更大的支持。 我只是想传达一般的想法。
还有一个版本。 不需要DOM操作,支持图像文件名中的所有字符。
var image_url = $('#something').css('background-image'), image; // Remove url() or in case of Chrome url("") image_url = image_url.match(/^url\("?(.+?)"?\)$/); if (image_url[1]) { image_url = image_url[1]; image = new Image(); // just in case it is not already loaded $(image).load(function () { alert(image.width + 'x' + image.height); }); image.src = image_url; }
迟到的答案,但你也可以这样做:
var img = new Image; img.src = $('#myDiv').css('background-image').replace(/url\(|\)$/ig, ""); var bgImgWidth = img.width; var bgImgHeight = img.height;
那么你不必操纵dom对象;
我把John的答案和Stryder的Plugin Style合并在一起。 这个插件等待图像加载:
$.fn.getBgImage = function(callback) { var height = 0; var path = $(this).css('background-image').replace('url', '').replace('(', '').replace(')', '').replace('"', '').replace('"', ''); var tempImg = $('<img />'); tempImg.hide(); //hide image tempImg.bind('load', callback); $('body').append(tempImg); // add to DOM before </body> tempImg.attr('src', path); $('#tempImg').remove(); //remove from DOM }; // usage $("#background").getBgImage(function() { console.log($(this).height()); });
请随意扩展此代码: https : //gist.github.com/1276118
另一个简短的方法
function bgSize($el, cb){ $('<img />') .load(function(){ cb(this.width, this.height); }) .attr('src', $el.css('background-image').match(/^url\("?(.+?)"?\)$/)[1]); }
用法
bgSize($('#element-with-background'), function(width, height){ console.log('width : ' + width + ' height : ' + height); });
我做了同样的事情的宽度:)
$.fn.getBgWidth = function () { var width = 0; var path = $(this).css('background-image').replace('url', '').replace('(', '').replace(')', '').replace('"', '').replace('"', ''); var tempImg = '<img id="tempImg" src="' + path + '"/>'; $('body').append(tempImg); // add to DOM before </body> $('#tempImg').hide(); //hide image width = $('#tempImg').width(); //get width $('#tempImg').remove(); //remove from DOM return width; };
它有一段时间,但我也需要这个解决scheme,基于一些build议的解决scheme,这里是我的完整解决scheme。
$.fn.getBgHeight = function () { var height = 0; var path = $(this).css('background-image').replace('url', '').replace('(', '').replace(')', '').replace('"', '').replace('"', ''); var tempImg = '<img id="tempImg" src="' + path + '"/>'; $('body').append(tempImg); // add to DOM before </body> $('#tempImg').hide(); //hide image height = $('#tempImg').height(); //get height $('#tempImg').remove(); //remove from DOM return height; };
css('background-image')会返回“url(…..)”,你不能用这个testing图片的高度,因为它不是一个DOM对象。
与上面相同,但使用regexp而不是replace()
$.fn.extend({ /** * gets background image * @param callback function (inside - this = HTMLElement image) */ get_bg_image: function(callback) { if (typeof callback != 'function') return; var regexp = /url\((.+)\)/i, regexp2 = /["']/gi, res = regexp.exec($(this).css('background-image')), img_src = res[1].replace(regexp2, ''), $tempImg = $('<img />'); $tempImg.hide(); $tempImg.bind('load', function(e) { callback.call(this, e); $tempImg.remove(); }); $('body').append($tempImg); $tempImg.attr('src', img_src); } }); // usage $('div').get_bg_image(function() { var bg_img_width = $(this).width(); });
以下是我的改编:
$.fn.getBgDim = function (callback) { var width = 0, height = 0, path = $(this).css("background-image").replace("url(", "").replace(")", "").replace("\"", "").replace("\"", ""), tmp = $("<img />"); tmp.hide(); tmp.bind("load", function() { width = $(this).width(); height = $(this).height(); callback({"width": width, "height": height}); $(this).remove(); }); $("body").append(tmp); tmp.attr('src', path); };
用法:
$("#image").getBgDim(function(dim) { console.log("Height: " + dim.height + " Width: " + dim.width); });
也许几乎没有什么可能性,我试图尽可能简化,最终这对我有用
var img = new Image ; img.src = $('#dom').css('background-image').replace("url(", "").replace(")", "").replace("\"", "").replace("\"", ""); $(img).load(function() { var bgImgWidth = img.width; var bgImgHeight = img.height; console.log("w::"+bgImgWidth+",h::"+bgImgHeight) ; }) ;
以上解决scheme的组合版本
var width, height; $(image).load(function () { width = image.width; height = image.height; }); image.src = $('#id').css('background-image').replace(/url\(|\)$/ig, "");
在这种情况下,你的CSS有双引号或浏览器操作执行以下操作。
var url = $('#myDiv').css('background-image').replace('url(','').replace(')','').replace('"','').replace('"',''); var bgImg = $('<img />'); bgImg.hide(); bgImg.bind('load', function() { var height = $(this).height(); alert(height); }); $('#myDiv').append(bgImg); bgImg.attr('src', url);
这是我的翻译。
$.fn.getBgImage = function (callback) { var path = $(this).css('background-image').match(/^url\("?(.+?)"?\)$/)[1]; var tempImg = $('<img />').hide().bind('load', function () { callback($(this).width(), $(this).height()); $(this).remove(); }).appendTo('body').attr('src', path); };
用法:
imgDiv.getBgImage(function (imgW, imgH) { //use the imgW and imgH here! });