2010-10-31 13 views
9

tôi đang tải hai divs trong một trang là gì.cách tốt nhất để chuyển đổi hai divs trong cùng khu vực

Tôi có liên kết có nội dung "Hiển thị chế độ xemB". Khi tôi bấm vào đây tôi muốn div B để hiển thị nơi diva là và divA để ẩn.

tôi muốn liên kết thay đổi thành "Hiển thị chế độ xemA"

cách thanh lịch nhất để thực hiện điều này trong jquery là gì?

+0

@bemace: Tại sao thẻ jquery-ui-tab? Vì OP cần một liên kết * duy nhất * để chuyển đổi khả năng hiển thị của hai phần tử, nên loại quy tắc ra khỏi các thẻ jquery-ui-theo định nghĩa. –

+0

@Freek - đoán bạn nói đúng. Cuộn lại –

Trả lời

10

Bằng việc sử dụng toggle() chức năng:

$("#link").toggle(function() { 
    toggleDivs(); 
    $(this).html("Show viewA"); 
}, function() { 
    toggleDivs(); 
    $(this).html("Show viewB"); 
}); 

function toggleDivs() { 
    $("#divA, #divB").toggle(); 
} 
1

Đó không phải là rất khó khăn, hãy thử một cái gì đó như thế này:

var $divA = $('#a'), 
    $divB = $('#b'), 
    $link = $('#link'); 

// Initialize everything 
$link.text('Show A'); 
$divA.hide(); 

$link.click(function(){ 

    // If A is visible when the link is clicked 
    // you need to hide A and show B 
    if($divA.is(':visible')){ 
    $link.text('Show A'); 
    $divA.hide(); 
    $divB.show(); 
    } else { 
    $link.text('Show B'); 
    $divA.show(); 
    $divB.hide(); 
    } 

    return false; 
}); 

Example on jsFiddle

+1

Giải pháp đó đơn giản, nhưng nó có thanh lịch không? –

0
var divA = $("#divA"); 
var divB = $("#divB"); 
var originalState = true; 

$("#toggler").click(function(e) { 
    originalState = !originalState; 
    if (originalState) { 
     divB.hide(); 
     divA.show(); 
    } else { 
     divA.hide(); 
     divB.show(); 
    } 
    $(this).html(originalState ? "Show viewB" : "Show viewA"); 
    e.preventDefault(); // Assuming you're using an anchor and "#" for the href 
}); 
+0

lỗi logic ~ khi originalState là true, sau đó divA.show() và divB.hide(). – dz1984

+0

Đúng, tất cả đều bị hỏng, cố định nó. – George

0

Nếu câu trả lời ở trên không cho bạn có hiệu quả mà bạn mong muốn, bạn có thể muốn thử sử dụngThay vào đó, phương pháp(ví dụ: target.replaceWith(newContent)). Như tên cho thấy, tên sẽ thay thế target bằng newContent. Phần tốt nhất là nó sẽ làm điều đó tại chỗ.

divA.replaceWith(divB); 
... 
divB.replaceWith(divA); 
4

Rất đơn giản.

Ví dụ:http://jsfiddle.net/Zmsnd/

$('#toggle').click(function() { 
    $('#container > .toggleMe').toggle(); 
    $(this).text(function(i,txt) { return txt === "Show viewB" ? "Show viewA" : "Show viewB"; }); 
}); 
0

Dưới đây là quan điểm của tôi về nó:

$("#link").click(function() { 
    $("div[id^=tog_]").toggle(); 
    $(this).text("Show " + $("div[id^=tog_]").not(":visible").attr("id").substr(4)); 
}); 

Xem nó trên JSFiddle.

Hy vọng điều này sẽ hữu ích.

3

Đây là thử thứ hai của tôi mà tôi nghĩ rằng đó là thanh lịch hơn so với câu trả lời ban đầu của tôi:

$("#link").click(function(e) { 
    e.preventDefault(); 
    $("#divA, #divB").toggle(); 
    $(this).text(function(i, text) { return (text == "Show viewA") ? "Show viewB" : "Show viewA" }); 
}); 
+0

Cái này không chính xác. Bên trong trình xử lý '.click()', bạn đang * gán * các sự kiện nhấp bổ sung mỗi khi bạn nhấp vào liên kết. – user113716

+0

Bạn nói đúng, bên trong sự kiện 'click',' toggle' không thể được sử dụng. Đã cập nhật ngay bây giờ. – PeterWong

+0

Giống như câu trả lời của tôi ngay bây giờ. – user113716

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