2012-02-07 3 views
3

Я бы назвал себя промежуточный разработчик JQuery, но я запутался о том, какая это линия (от Bootstrap Твиттера) делает:Что это делает jQuery?

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

В частности, часть в квадратных скобках. Может ли кто-нибудь объяснить это мне?

+0

Вы спрашиваете об условном операторе? – SLaks

+1

Я бы предположил, что путаница OP (моя была) находится в синтаксисе $ jqueryobject [function] (argument) – yoozer8

ответ

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, иначе называемый тернарным оператором. В принципе, если типом заголовка является «объект», тогда он получает индекс «append», иначе индекс «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 (то есть они оценивают что-то, а не управляют потоком). Следующий пример показывает это: Iif() функция

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

VB и функция IF() листа в Excel точно эквивалентны.

Смежные вопросы