2011-08-07 38 views
7

trao sau

$("#identifier div:first, #idetifier2").fadeOut(300,function() { 
    // I need to reference just the '#identifier div:first' element 
    // however $(this) will grab both selectors 
}); 

Có cách nào tốt hơn để đi về này khác hơn là chỉ gọi $ ("# nhận dạng div: thứ nhất") một lần nữa?

+0

** this ** đề cập đến phần tử hiện tại. Vì bộ chọn của bạn kết thúc tìm kiếm nhiều mục, nó sẽ áp dụng hàm ** fadeOut ** cho mỗi mục. Bạn đang cố gắng để làm chính xác? – alkos333

+0

làm mờ dần hai yếu tố, làm việc với chúng một cách riêng biệt sau đó làm mờ chúng trở lại. Tôi có thể đạt được điều này theo một cách khác, mà tôi biết. Tôi tuy nhiên tò mò như thế nào tôi sẽ làm điều đó trong trang viên này. – rlemon

Trả lời

5

Không, nó sẽ gọi hàm cho từng tay cầm riêng biệt.

Dấu phẩy trong chọn của bạn là tương đương với nói:

$("#identifier div:first").fadeOut(300,function() { 
    // $(this) -> '#identifier div:first' 
    }); 

$("#idetifier2").fadeOut(300,function() { 
    // $(this) -> '#identifier2' 
}); 

Bạn có thể kiểm tra bằng cách nói (chưa được kiểm tra):

$("#identifier div:first, #idetifier2").fadeOut(300,function() { 
    if($(this).is("#identifier div:first") { 
    // do something 
    } 
}); 

Tuy nhiên, nếu bạn muốn làm những việc khác nhau (như những gì có vẻ từ bài đăng của bạn), tốt hơn nên đính kèm chúng một cách riêng biệt.

1

Chỉ cần kiểm tra về những ID bạn hiện đang xử lý trong $(this)

if(this.id == "identifier"){ //your code goes here } 
+1

'this.id' thậm chí còn ngắn hơn (và nhanh hơn). –

+0

bạn đúng :) –

+2

ID không bao gồm biểu tượng băm. –

3

gì nhiều người dường như không nhận ra trong jQuery là khi có nhiều bộ chọn phù hợp, bất kể chức năng là sau khi danh sách chọn sẽ được gọi riêng từng cái một trên mỗi bộ chọn riêng lẻ.

Vì vậy $("#identifier div:first, #identifier2") sẽ riêng biệt phù hợp với cả hai:

$("#identifier div:first") 
and 
$("#identifier2") 

Và, sẽ gọi các quy định fadeOut chức năng và nó xử lý riêng cho từng trận đấu. Điều đó có nghĩa là mỗi trình xử lý sẽ có giá trị this riêng được đặt cho phù hợp với công cụ chọn phù hợp.

Bên trong bên trong jQuery, có một vòng lặp như mã giả này lặp qua tất cả các trận đấu selector trở lại và gọi hàm tiếp theo trong chuỗi cho mỗi người:

for (var i = 0; i < matches.length; i++) { 
    jQuery["fadeOut"].call(matches[i], duration, easing, fn); 
} 

Nếu bạn muốn mã riêng biệt được sử dụng cho hai trận đấu khác nhau, sau đó nó có thể là tốt hơn để chỉ cần sử dụng hai câu lệnh jQuery riêng biệt:

$("#identifier div:first").fadeOut(300,function() { 
    // do stuff for #identifier div:first 
}); 

$("#identifier2").fadeOut(300,function() { 
    // do stuff for #identifier2 
}); 

Nếu bạn có rất nhiều mã trong khối và nó chủ yếu là giống nhau, sau đó bạn cũng có thể chi nhánh trong vòng một khối mã chung:

$("#identifier div:first, #identifier2").fadeOut(300,function() { 
    if (this.id != "identifier2") { 
     // execute code that only applies to the #identifier match 
    } 
    // execute rest of common code 
}); 
+0

Anh ấy không kiểm tra #identifier nhưng div đầu tiên bên trong nó. – Mrchief

+0

@Mrchief - sửa mã mẫu. – jfriend00

+0

:). Và nếu bạn có nhiều hơn? – Mrchief

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