这个jQuery在做什么?

时间:2012-02-07 01:21:49

标签: javascript jquery jquery-plugins

我会称自己为中级jQuery开发人员,但我对此行(来自Twitter的Bootstrap)的行为感到困惑:

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

具体来说,方括号之间的部分。任何人都可以向我解释一下吗?

3 个答案:

答案 0 :(得分: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

由于所选方法位于括号内,因此您可以使用字符串来选择方法 这是相同的:

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

答案 1 :(得分:1)

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

首先,检查基于价值的属性:

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()工作表函数完全等效。

答案 2 :(得分:0)

这是一个内联if语句,否则称为三元运算符。基本上,如果标题的类型是“对象”,那么它将获得索引'append',否则索引'html'。希望这是你的问题的意思。