2010-10-31 16 views
9

मैं एक पेज में दो divs लोड हो रहा हूँ में दो divs टॉगल करने के लिए सबसे अच्छा तरीका क्या है।एक ही क्षेत्र

मेरे पास एक लिंक है जो "व्यूबीबी दिखाएं" कहता है। जब मैं इसे क्लिक करता हूं तो मैं div बी को दिखाना चाहता हूं जहां diva है और diva को छिपाने के लिए।

मैं तो लिंक करने के लिए "viewA शो"

क्या jQuery में ऐसा करने का सबसे खूबसूरत तरीका है बदलना चाहते हैं?

+0

@bemace: क्यों jQuery-ui-टैब टैग? चूंकि ओपी को दो तत्वों की दृश्यता को टॉगल करने के लिए * एकल * लिंक की आवश्यकता होती है, इसलिए यह परिभाषा के अनुसार jquery-UI-tabs का नियम है। –

+0

@ फ्रीक - अनुमान है कि आप सही हैं। –

उत्तर

10

toggle() समारोह का उपयोग करके आप जिस प्रभाव को चाहते हैं, आपका उपयोग करने का प्रयास करना चाहेंगे इसके बजायविधि (यानी, target.replaceWith(newContent))। जैसा कि नाम से पता चलता है, यह target को newContent के साथ प्रतिस्थापित करेगा। सबसे अच्छा हिस्सा यह है कि यह जगह में करेगा।

divA.replaceWith(divB); 
... 
divB.replaceWith(divA); 
1

कि बहुत मुश्किल नहीं है, कुछ इस तरह का प्रयास करें:

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

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

वापस हल किया गया यह समाधान सरल है, लेकिन यह सुरुचिपूर्ण है? –

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

त्रुटि तर्क ~ जब मूल स्थिति सत्य है, तो divA.show() और divB.hide()। – dz1984

+0

हाँ, सब खराब हो गया था, इसे ठीक किया गया। – George

0

ऊपर जवाब नहीं देते हैं:

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

4

बहुत आसान।

उदाहरण:

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

JSFiddle पर यह देखें:http://jsfiddle.net/Zmsnd/

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

यहाँ उस पर मेरी ले रहा है।

उम्मीद है कि इससे मदद मिलती है।

3

यह मेरी दूसरी कोशिश है मुझे लगता है कि है कि मेरे मूल जवाब की तुलना में अधिक सुंदर है:

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

यह गलत है। '.click() 'हैंडलर के अंदर, जब भी आप लिंक पर क्लिक करते हैं तो * * अतिरिक्त क्लिक ईवेंट असाइन कर रहे हैं। – user113716

+0

आप सही हैं, 'क्लिक' ईवेंट के अंदर, 'टॉगल' का उपयोग नहीं किया जा सका। अभी अपडेट किया गया – PeterWong

+0

अब मेरे उत्तर के समान है। – user113716

संबंधित मुद्दे