我会称自己为中级jQuery开发人员,但我对此行(来自Twitter的Bootstrap)的行为感到困惑:
$tip.find('.help-popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
具体来说,方括号之间的部分。任何人都可以向我解释一下吗?
答案 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'。希望这是你的问题的意思。