2012-02-07 67 views
3

我会叫我自己中间jQuery的开发者,但我感到困惑的这条线是什么(从Twitter的引导)正在做:jQuery在做什么?

$tip.find('.help-popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title) 

具体而言,方括号之间的部分。有人可以向我解释吗?

+0

你问关于条件运算符吗? – SLaks 2012-02-07 01:24:26

+1

我猜想OP的困惑是(我的)是在$ jqueryobject [函数](参数)语法 – yoozer8 2012-02-07 01:49:29

回答

3
$tip // tip object 
.find('.help-popover-title') // find elements of this class 

// if the data inside the title variable is an object 
// use the append method otherwise use html method 
[$.type(title) == 'object' ? 'append': 'html'] 

(title) // lastly, execute the selected function and pass in the title var 

内部语句使用三元运算符。这基本上是一个单行if..else声明

x = 5; 

x === 5 ? true : false; // true 
x === 4 ? true: false; // false 

由于所选择的方法是在括号中,你可以使用一个字符串来选择方法 它equalvelent到:

$tip['append'](title) === $tip.append(title) 
0

这是一个内联if语句,否则称为三元操作符。基本上,如果标题的类型是'对象',那么它会得到索引'追加',否则索引'html'。希望这个你的问题意味着什么。

1

的大的概念在这里是对象属性不仅可以直接和直接访问,而且可以用方括号包含带有属性名称的字符串(文字或变量)。而且,函数始终是对象的属性 - 即使只有全局上下文。

,先看看基于价值的属性:

var myobj = { 
    animal: 'frog', 
    color: 'blue', 
    fly: function() {/*fly*/}, 
    hide: function() {/*hide*/} 
}; 
alert(myobj.animal); // alerts 'frog'; 
var prop = 'color'; 
alert(myobj[prop]); // alerts 'blue'; 

然后注意,当属性值的功能它不会改变任何东西。他们还访问方式相同:

myobj.fly() // run function fly 
prop = 'hide'; 
myobj[prop]() // run function named in variable 'prop', which is 'hide'; 

所以,最后,你贴只是检查title变量的类型并选择相应的功能,使其在发现元素的子元素的代码片段。如果title是对象,则为append it。如果不是(它必须是文本),那么请改用html函数。它以这种方式编码,以节省重复的代码或声明新的变量。

三元操作符是正常程序if语句的表达形式(也就是说,它们评估的是某种东西而不是控制流)。下面的例子将展示这一点:

if (a == 1) {return 'yes';} else {return 'no';} 
return (a == 1) ? 'yes' : 'no'; 

VB的Iif()功能和Excel的IF()工作表函数是完全等价的。