2013-05-21 49 views
5

Tôi chạy vào dòng mã này và tôi không thể tìm ra ý nghĩa của nó:Dấu ngoặc và dấu ngoặc đơn sau bộ chọn jquery nghĩa là gì?

$("#theAppContainer")[s > u ? "addClass" : "removeClass"]("something"); 

Tôi hiểu phần đầu tiên là lựa chọn các yếu tố được gọi là theAppContainer và phần thứ hai để đánh giá "addClass" nếu s> u, nhưng tôi không thể tìm ra những gì dòng mã này không tổng thể.

+1

Đó là toán tử bậc ba, giống như if/else, vì vậy nếu 's' lớn hơn' u', thì hãy chọn addClass, v.v. – adeneo

+3

Như một sidenote, cần lưu ý rằng toggleClass có công tắc, vì vậy bạn có thể làm '$ (" # theAppContainer "). toggleClass ('something', s> u);' – adeneo

Trả lời

13

The bracket syntax gets the value of a property by name, và ngoặc gọi hàm đó là giá trị của tài sản đó. Số này tương đương với:

var container = $('#theAppContainer'); 

if(s > u) { 
    container.addClass('something'); 
} else { 
    container.removeClass('something'); 
} 

Ngoài ra, vui lòng không bao giờ viết mã như thế. =)

Ngoài ra cũng có, toggleClass mất một switch lập luận thứ hai mà bạn có thể sử dụng thay vì:

$('#theAppContainer').toggleClass('something', s > u); 
+0

Tôi thích ternary's rất nhiều, nhưng trong trường hợp này, ya đó là loại haha ​​vô lý, đồng ý! –

+0

Tôi không biết, tôi thích nó. Nó thậm chí không phải là chút điên rồ nhất của JQuery đơn lót tôi đã nhìn thấy! [Từ quan điểm hiệu suất] (http://jsperf.com/ternary-vs-if-using-jquery), ít nhất, chúng hầu như giống hệt nhau. –

+1

@SandyGifford: Hiệu suất phải là quan điểm cuối cùng cần xem xét! Dù sao thì, tôi đã thêm vào cách thức làm việc của jQuery. Cảm ơn vì đã khiến tôi nhìn :) – Ryan

5

$("#theAppContainer") trả về đối tượng jquery.

jqueryObject["addClass"] đồng nghĩa với jqueryObject.addClass

Vì vậy, jqueryObject["addClass"] trả về phương pháp addClass trên đối tượng jquery.

Sau đó, bạn sử dụng ("something") để chuyển tham số vào và thực thi phương pháp.

Vì vậy, bạn đang chủ yếu làm

var myJqueryObject = $("#theAppContainer"); 
if(s > u) { 
    myJqueryObject.addClass("something"); 
} 
else { 
    myJqueryObject.removeClass("something"); 
} 
1

Bracket Quảng trường ký hiệu.

$('#element')['hide'](700)

Dot ký hiệu:

$('#element').hide(700)

điều khác (?:) được gọi ternary operator

mà làm một so sánh tuyên bố trả lại một giá trị boolean,
đâu s>u là một tuyên bố, và tùy thuộc vào kết quả các giá trị được sử dụng:

STATEMENT ? IF TRUE USE THIS : IF FALSE USE THAT ;

nếu s > u sử dụng 'addClass' khác sử dụng 'removeClass'
có nghĩa là bạn sẽ nhận được $("#theAppContainer")["addClass"]("something"); nếu s > u$("#theAppContainer")["removeClass"]("something"); nếu s===u || s<u
mà có thể được dịch theo ký hiệu DOT trong:

$("#theAppContainer").addClass("something"); 

hoặc

$("#theAppContainer").removeClass("something"); 

Đây không phải là cách tốt nhất để làm điều đó, vì bạn có thể sử dụng toggleClass() phương pháp trong đó trường hợp cụ thể, nhưng bất kỳ cách tốt để biết.
Và không đúng là bạn không nên sử dụng ký hiệu khung. Trong JS nâng cao, bạn sẽ thấy tất cả các lợi ích.

+0

Nếu bạn đang nói về câu trả lời của tôi, tôi không nói không bao giờ sử dụng ký hiệu ngoặc vuông. Đó chỉ là một lựa chọn ngớ ngẩn trong trường hợp này. – Ryan

Các vấn đề liên quan