我怎样才能获得财产的价值?

时间:2014-03-07 11:48:15

标签: javascript jquery

这会筛选出背景位置的em:

$('*').filter(function() {
    return $(this).css('background-position').indexOf('em');
})

现在我怎样才能得到它的宽度并设置变量:

background-position: 2em 5em;

这里,第一个变量应该得到2,第二个变量应该得到5个返回的过滤器。

3 个答案:

答案 0 :(得分:1)

  

Em值可能是包围ol'noodle的最困难的值,可能是因为它们的概念是抽象的和任意的。这是独家新闻:1em等于所讨论元素的当前字体大小。如果您没有在页面上的任何位置设置字体大小,那么它将是浏览器默认值,大概是16px。所以默认情况下1em = 16px。如果您要在身体上设置20px的字体大小,那么1em = 20px。

var em=$(element).css('background-position')/16;

Soruce

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')
  }

});