这会筛选出背景位置的em:
$('*').filter(function() {
return $(this).css('background-position').indexOf('em');
})
现在我怎样才能得到它的宽度并设置变量:
background-position: 2em 5em;
这里,第一个变量应该得到2,第二个变量应该得到5个返回的过滤器。
答案 0 :(得分:1)
Em值可能是包围ol'noodle的最困难的值,可能是因为它们的概念是抽象的和任意的。这是独家新闻:1em等于所讨论元素的当前字体大小。如果您没有在页面上的任何位置设置字体大小,那么它将是浏览器默认值,大概是16px。所以默认情况下1em = 16px。如果您要在身体上设置20px的字体大小,那么1em = 20px。
var em=$(element).css('background-position')/16;
var div=$('body').css('font-size');
var posEm=$(element).map(function(){
return parseInt($(this).css('background-position'),10);
}).get();
positonTopInEm=posEm[0]/div;
答案 1 :(得分:1)
听起来你在问如何解析一个字符串。您的filter
来电将为您提供background-position
媒体资源中包含“em”的元素列表。要遍历这些并从每个中获取值(记住,它是一个列表,它上面可以有多个条目),你可以这样做:
$('*').filter(function() {
return $(this).css('background-position').indexOf('em');
}).each(function() {
var match = $(this).css('background-position').match(/(\d+)em[ \t]+(\d+)em/);
var first = match && match[1];
var second = match && match[2];
// Use `first` and `second`.
});
例如,如果您的元素背景位置为"2em 5em"
,那么first
将为"2"
,second
将为"5"
迭代。 (如果您想将它们作为数字,则可以使用first = parseInt(first, 10)
或类似的。)
正如A. Wolff在评论中指出的那样,至少有些浏览器会从css
函数返回像素值而不是em值;同样,如果相关元素没有分配特定规则,我已经看到Chrome返回百分比。因此,在这些浏览器上,您的过滤器根本不会返回任何元素。
这是一个稍微概括一下的例子:
$('*').filter(function() {
return $(this).css('background-position'); // Any non-blank value
}).each(function() {
var $this = $(this), match, first, second;
// Get the value, including units -- these may be "em", "%", or "px" (or others?)
match = $this.css('background-position').match(/([\d.]+)([^ \t]*)[ \t]+([\d.]+)([^ \t]*)/);
if (match) {
first = convertToEms($this, parseFloat(match[1]), match[2]);
second = convertToEms($this, parseFloat(match[3]), match[4]);
}
});
function convertToEms($elm, value, units) {
switch (units.toLowerCase()) {
case "em":
// Already in ems, we're done
return value;
case "px":
// 1em = the number of pixels in the font size
return value / parseFloat($elm.css("font-size"));
case "%":
// You'll want to figure this out, it happens on Chrome with defaults
default:
// And you'll want to figure out what to do with units you don't know
}
}
答案 2 :(得分:0)
如果我理解你正在尝试做什么,你可以使用
$('*').each(function() {
if($(this).css('background-position').indexOf('em') != -1){
$(this).css('width','200')
}
});