2

我正在开发三星 SDK 并修改智能电视的 javascript 应用程序。我偶然发现了这段代码,但我不明白它是做什么if($('.menuButton').push()){...的。本机推送功能没有被覆盖,但这仍然有效。我认为 push 会将一个元素附加到数组中,但事实并非如此

if(direction==tvKey.KEY_ENTER){
        if($('.menuButton').push()){
            $('.simple_menu').slideDown('easy');
     ........
4

3 回答 3

3

调用.push(x)JQuery 选择器的行为与调用.push(x)Javascript 中的普通数组相同。

来自W3SchoolsMozilla 开发者网络

push() 方法将新项目添加到数组的末尾,并返回新的长度。

返回: 调用该方法的对象的新长度属性。

如果没有参数传递给.push(),则数组保持原样,并且仍然返回长度。所以这里发生的是数组长度被返回并用于评估if语句。

示例:以下将返回p标签的数量:

$("p").push();

但请注意: JQuery 对象 的.push方法标记为仅供内部使用,因此不应依赖.

于 2013-01-25T14:44:13.827 回答
1

不应依赖此方法。不要使用它。

push()在 jQuery 对象(这是一个类似数组的对象)上定义的,它映射到本机Array.prototype.push()方法,但它仅供内部使用,未记录在案,您无法确定它在未来版本中是否会以相同的方式工作。

在这段代码中,它似乎是用来获取jQuery对象中元素的数量(这是native.push()所做的,它返回length属性的值)。

但是有一个记录的方法可以做到这一点:

$('.menuButton').length

该代码依赖于这样一个事实,即如果length为 0,则在转换为布尔值时它将false在 Javascript 中求值,因此该if块中的代码仅在 jQuery 对象不为空时才会运行。

于 2013-01-25T15:14:25.663 回答
0

我不确定是什么$().push,或者它是否存在(不要与本机 JavaScriptarray.push()方法混淆),但您可能正在寻找$().add

给定一个表示一组 DOM 元素的 jQuery 对象,.add() 方法从这些元素的并集和传递给该方法的元素构造一个新的 jQuery 对象。

另请注意,jQuery 对象永远不会为假,您的 if 语句可能应该是:

if($('.menuButton').add(something).length > 0) {

编辑:看起来您正在使用仅限内部、未记录且不受支持的 jQuery 方法。如果您想获取当前 jQuery 对象的长度(这$().push()似乎是这样做的),只需使用length

if($('.menuButton').length > 0) {
于 2013-01-25T14:43:09.107 回答