2010-09-11 95 views
4

嘿,我正在学习jQuery,我很好奇。在jQuery中比较尺寸

对于在字符串返回的大小,就像说的功能:

$(".some-class").css("line-height"); // => "18px" 

有没有一种方法对它们进行比较?例如,如果我想在做某件事之前看它是否至少有一定的尺寸?

我实际上并没有计划使用这个,我只是好奇。我四处搜寻,但我没有找到任何东西。我想象一个插件将被写入。也许首先要确保比较字符串具有相同的度量单位,然后查看哪个数字更大或类似。

作为一个侧面的问题,出于好奇:在javascript中,将保存的方法只有的数字?那么,我将如何去从"18px"只得到18"18"?如果为了好玩/练习,我想实现我上面所说的,是否有任何方法我应该看看,从其他方面拆分数字,还是应该使用正则表达式?

+0

你的问题没问题,但实际上我会选择班级,因为line-height总是由班级设置,并且希望不要内联。但我知道有些情况下,某些属性是动态的,例如高度或左侧或顶部。 – 2010-09-11 09:04:43

+0

@Caspar:你能详细说明一下吗?我是新来的jQuery/JavaScript。这个问题是出于纯粹的好奇心。 – 2010-09-11 09:22:43

回答

3

我不太确定各种形式的单位,但要获得整数的返回值。

if (parseInt($(".some-class").css("line-height"), 10) < 18) { 
    alert("It's less than 18px!"); 
} 

不要忘记设置parseInt函数的基数:http://www.w3schools.com/jsref/jsref_parseInt.asp

+1

+1为基数。 'parseInt'是错误的常见来源。 – eyelidlessness 2010-09-11 08:12:18

1

不要忘记,如果行高不设置明确,the height returned will be "normal" (jsFiddle),所以你也应该处理。 ...(normal是默认值,它应该是某种合理的距离)

您还可以使用正则表达式来分割px。一旦你获得了串入这种形式,JS will do the type conversion for you (jsFiddle)

var height = $(".some-class").css("line-height"); 

if (height !== "normal") { 

    // Remove 'px' from the end. The $ means the end of the line in a regex. 
    height = height.replace(/px$/, ""); 

    if (height < 18) { 
     alert("The height (" + height + ") is less than 18"); 
    } else { 
     alert("The height (" + height + ") is greater or equal to 18"); 
    } 
} else { 
    alert("The height is " + height); 
} 

这里的a Stack Overflow question about line-height normal,这里是a rant about line-height normal by Eric Meyer