Ngẫu nhiên, trong khi câu hỏi này đã được answered by drinchev , Tôi nghĩ tôi sẽ dán thử nghiệm nhanh này mà tôi vừa làm, sau khi đọc câu hỏi, cũng có tác dụng. Mặc dù ... nó làm tôi ngạc nhiên khi nó đã làm:
$('#recipient').click(
function(){
var pair = [this, this.previousElementSibling];
$(pair).toggleClass('red green');
});
JS Fiddle demo.
Ngẫu nhiên, một JS Perf loose comparison of the two selector approaches.
Sửa để thêm một tức là-(cho đến nay như tôi biết) cập nhật -friendly, mặc dù tôi đang saddling tất cả các trình duyệt với nó, chứ không phải là tính năng phát hiện (còn, cuối cùng tôi nhận ra rằng màu xanh ! = màu xanh lá cây):
function pESibling(n){
var nPS = n.previousSibling;
if (!n || nPS === null){
return false;
}
else if (nPS.nodeType == 1){
return nPS;
}
else {
return pESibling(nPS);
}
}
var that = document.getElementById('recipient'),
pair = [that, pESibling(that)];
$(pair).toggleClass('red green');
console.log(pair);
JS Fiddle demo
Nguồn
2012-04-22 16:11:27
Niềm vui của web! Không, nghiêm túc ..! =) Để cắt ngắn một câu chuyện dài [IE <9 không 'làm' 'previousElementSibling'] (http://www.quirksmode.org/dom/w3c_core.html#t84). Tuy nhiên, có cách tiếp cận cũ, và luôn luôn thời trang, 'if'. =) –
Tôi đã mắc sai lầm ngu ngốc khi kiểm tra giải pháp của bạn. Trong khi, không, 'previousElementSibling' sẽ không thực hiện thủ thuật, chỉ cần sử dụng một mảng sẽ ...' $ ([$ (this), $ (this.prev())]) 'hiện nó! – Gary
Có một cách dễ dàng hơn $ (this) .prev(). VàSelf(). Toggle(); –