टेबल रो पर स्लाइडडाउन (या शो) फ़ंक्शन का उपयोग कैसे करें?


214

मैं एक तालिका में एक पंक्ति जोड़ने की कोशिश कर रहा हूं और उस पंक्ति को देखने में स्लाइड कर रहा हूं, हालांकि स्लेडाउन फ़ंक्शन एक प्रदर्शन को जोड़ रहा है: तालिका पंक्ति में शैली को ब्लॉक करें जो लेआउट को गड़बड़ कर देता है।

किसी भी विचार कैसे इस के आसपास काम करने के लिए?

यहाँ कोड है:

$.get('/some_url', 
  { 'val1': id },

  function (data) {
    var row = $('#detailed_edit_row');
    row.hide();
    row.html(data);
    row.slideDown(1000);
  }
);

क्या यह एक मेज होना चाहिए? मुझे लगता है कि मेज के बिना बहुत आसान हो।
MrChrister

fadeInऔर fadeOutतालिका पंक्तियों पर काम करते हैं और एक अच्छा वैकल्पिक दृश्य प्रभाव बनाते हैं (केवल फ़ायरफ़ॉक्स पर परीक्षण किया गया है)
सैवेज

जवाबों:


295

तालिका पंक्तियों पर एनिमेशन समर्थित नहीं हैं।

Chaffer और Swedberg द्वारा "लर्निंग jQuery" से


तालिका पंक्तियाँ एनीमेशन के लिए विशेष बाधाएँ पेश करती हैं, क्योंकि ब्राउज़र अपनी दृश्यमान प्रदर्शन संपत्ति के लिए विभिन्न मूल्यों (तालिका-पंक्ति और ब्लॉक) का उपयोग करते हैं। एनीमेशन के बिना .hide () और .show () विधियाँ, तालिका पंक्तियों के साथ उपयोग करने के लिए हमेशा सुरक्षित होती हैं। के रूप में jQuery के संस्करण 1.1.3, .fadeIn () और .fadeOut () के रूप में अच्छी तरह से इस्तेमाल किया जा सकता है।


आप अपनी td सामग्री को div में लपेट सकते हैं और उस पर स्लाइडडाउन का उपयोग कर सकते हैं। आपको यह तय करने की आवश्यकता है कि क्या एनीमेशन अतिरिक्त मार्कअप के लायक है।


5
बहुत अच्छा काम करता है! एक अन्य गौण गौण है: यदि कोई हो तो आपको सेल पैडिंग को चेतन करना होगा। लेकिन यह कोई बड़ी बात नहीं है।
एड्रियन ग्रिगोर सेप

11
आप इस तरह से गद्दी को चेतन कर सकते हैं:$('tr').find('td').animate({padding: '0px'}, {duration: 200});
एंड्रयू

@ ईमली: क्या आप कृपया jQuery स्रोत की विशिष्ट लाइनों को इंगित कर सकते हैं? मुझे अपने प्रोजेक्ट के लिए स्रोत को हैक करने का प्रलोभन है।
Randomblue

7
एक सीधा जवाब नहीं है, लेकिन मैंने पाया है कि fadeIn / fadeOut का उपयोग करना ज्यादातर स्थितियों में लगभग अच्छा है और यह तालिका पंक्तियों पर ठीक काम करता है।
फिल लानास

@PhilLaNasa पहले मैं "नाह, यह अच्छा नहीं लगेगा" की तरह था, लेकिन फिर मैंने इसे आज़माया और यह वास्तव में अच्छा लग रहा था! यात्रा के लिए धन्यवाद!
केंटन डी जोंग

157

मैं बस ट्रे को गतिशील रूप से लपेटता हूं फिर स्लाइडअप / स्लाइडडाउन पूरा होने पर इसे हटा दें। यह एक बहुत छोटा ओवरहेड है जो एक या दो टैग्स को जोड़ रहा है और हटा रहा है और फिर एनीमेशन पूरा होने के बाद उन्हें हटा रहा है, मुझे ऐसा करने में कोई दृश्यमान अंतराल दिखाई नहीं दे रहा है।

स्लाइडअप :

$('#my_table > tbody > tr.my_row')
 .find('td')
 .wrapInner('<div style="display: block;" />')
 .parent()
 .find('td > div')
 .slideUp(700, function(){

  $(this).parent().parent().remove();

 });

नीचे खिसकना:

$('#my_table > tbody > tr.my_row')
 .find('td')
 .wrapInner('<div style="display: none;" />')
 .parent()
 .find('td > div')
 .slideDown(700, function(){

  var $set = $(this);
  $set.replaceWith($set.contents());

 });

मुझे fletchzone.com को श्रद्धांजलि अर्पित करनी है क्योंकि मैंने उसका प्लगइन लिया और उसे वापस ऊपर ले गया, चीयर्स मेट।


धन्यवाद! किसी तरह इसने मेरे लिए काम किया: row.find ('td')। wraInner ('<div style = "display: none;" />').parent().prependTo('#MainTable> tbody।) (' खोजें)। td> div ')। स्लाइडडाउन (' धीमा ', फंक्शन () {var $ set = $ (यह); $ set.replaceWith ($ set.contents ());});
पलौआ

केवल समस्या कोशिकाओं के बीच थोड़ी देरी है।
आर्किमिडीज ट्रेजानो

41

यहाँ एक प्लग-इन है जो मैंने इसके लिए लिखा था, यह फ्लेच के कार्यान्वयन से थोड़ा सा लगता है, लेकिन मेरा उपयोग केवल एक पंक्ति को ऊपर या नीचे (कोई डालने वाली पंक्तियों) को स्लाइड करने के लिए किया जाता है।

(function($) {
var sR = {
    defaults: {
        slideSpeed: 400,
        easing: false,
        callback: false     
    },
    thisCallArgs: {
        slideSpeed: 400,
        easing: false,
        callback: false
    },
    methods: {
        up: function (arg1,arg2,arg3) {
            if(typeof arg1 == 'object') {
                for(p in arg1) {
                    sR.thisCallArgs.eval(p) = arg1[p];
                }
            }else if(typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')) {
                sR.thisCallArgs.slideSpeed = arg1;
            }else{
                sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
            }

            if(typeof arg2 == 'string'){
                sR.thisCallArgs.easing = arg2;
            }else if(typeof arg2 == 'function'){
                sR.thisCallArgs.callback = arg2;
            }else if(typeof arg2 == 'undefined') {
                sR.thisCallArgs.easing = sR.defaults.easing;    
            }
            if(typeof arg3 == 'function') {
                sR.thisCallArgs.callback = arg3;
            }else if(typeof arg3 == 'undefined' && typeof arg2 != 'function'){
                sR.thisCallArgs.callback = sR.defaults.callback;    
            }
            var $cells = $(this).find('td');
            $cells.wrapInner('<div class="slideRowUp" />');
            var currentPadding = $cells.css('padding');
            $cellContentWrappers = $(this).find('.slideRowUp');
            $cellContentWrappers.slideUp(sR.thisCallArgs.slideSpeed,sR.thisCallArgs.easing).parent().animate({
                                                                                                                paddingTop: '0px',
                                                                                                                paddingBottom: '0px'},{
                                                                                                                complete: function () {
                                                                                                                    $(this).children('.slideRowUp').replaceWith($(this).children('.slideRowUp').contents());
                                                                                                                    $(this).parent().css({'display':'none'});
                                                                                                                    $(this).css({'padding': currentPadding});
                                                                                                                }});
            var wait = setInterval(function () {
                if($cellContentWrappers.is(':animated') === false) {
                    clearInterval(wait);
                    if(typeof sR.thisCallArgs.callback == 'function') {
                        sR.thisCallArgs.callback.call(this);
                    }
                }
            }, 100);                                                                                                    
            return $(this);
        },
        down: function (arg1,arg2,arg3) {
            if(typeof arg1 == 'object') {
                for(p in arg1) {
                    sR.thisCallArgs.eval(p) = arg1[p];
                }
            }else if(typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')) {
                sR.thisCallArgs.slideSpeed = arg1;
            }else{
                sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
            }

            if(typeof arg2 == 'string'){
                sR.thisCallArgs.easing = arg2;
            }else if(typeof arg2 == 'function'){
                sR.thisCallArgs.callback = arg2;
            }else if(typeof arg2 == 'undefined') {
                sR.thisCallArgs.easing = sR.defaults.easing;    
            }
            if(typeof arg3 == 'function') {
                sR.thisCallArgs.callback = arg3;
            }else if(typeof arg3 == 'undefined' && typeof arg2 != 'function'){
                sR.thisCallArgs.callback = sR.defaults.callback;    
            }
            var $cells = $(this).find('td');
            $cells.wrapInner('<div class="slideRowDown" style="display:none;" />');
            $cellContentWrappers = $cells.find('.slideRowDown');
            $(this).show();
            $cellContentWrappers.slideDown(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing, function() { $(this).replaceWith( $(this).contents()); });

            var wait = setInterval(function () {
                if($cellContentWrappers.is(':animated') === false) {
                    clearInterval(wait);
                    if(typeof sR.thisCallArgs.callback == 'function') {
                        sR.thisCallArgs.callback.call(this);
                    }
                }
            }, 100);
            return $(this);
        }
    }
};

$.fn.slideRow = function(method,arg1,arg2,arg3) {
    if(typeof method != 'undefined') {
        if(sR.methods[method]) {
            return sR.methods[method].apply(this, Array.prototype.slice.call(arguments,1));
        }
    }
};
})(jQuery);

मूल उपयोग:

$('#row_id').slideRow('down');
$('#row_id').slideRow('up');

व्यक्तिगत तर्क के रूप में स्लाइड विकल्प पास करें:

$('#row_id').slideRow('down', 500); //slide speed
$('#row_id').slideRow('down', 500, function() { alert('Row available'); }); // slide speed and callback function
$('#row_id').slideRow('down', 500, 'linear', function() { alert('Row available'); }); slide speed, easing option and callback function
$('#row_id').slideRow('down', {slideSpeed: 500, easing: 'linear', callback: function() { alert('Row available');} }); //options passed as object

मूल रूप से, स्लाइड डाउन एनीमेशन के लिए, प्लग-इन DIV में कोशिकाओं की सामग्री को लपेटता है, उन को एनिमेट करता है, फिर उन्हें हटाता है, और स्लाइड अप के लिए इसके विपरीत (सेल गद्दी से छुटकारा पाने के लिए कुछ अतिरिक्त चरणों के साथ)। यह उस वस्तु को भी लौटाता है जिसे आपने इसे कहा था, इसलिए आप इस तरह से श्रृंखला विधियों को छोड़ सकते हैं:

$('#row_id').slideRow('down').css({'font-color':'#F00'}); //make the text in the row red

आशा है कि यह किसी की मदद करता है।


क्या होगा यदि मैं पंक्तियों के समूह को जोड़ना / हटाना चाहता हूँ? मुझे
वोलेटिल 3

कॉलबैक फ़ंक्शन मेरे लिए तुरंत फायरिंग है।
जस्टिन

यह सिर्फ दिखावा है। हालांकि भयानक काम करता है (हालांकि कॉलबैक कार्यक्षमता का परीक्षण नहीं किया है)। एक दिन मैं जानता हूँ कि रिवर्स इंजीनियर को सक्षम करने के लिए पर्याप्त jQuery है।
कार्टिबेस्फोरस

1
FYI करें: ऐसा लगता है कि यदि लक्ष्य पंक्ति की सामग्री एक और तालिका है तो उसे तोड़ दिया जाएगा। मेरे पास और आगे जाने का समय नहीं है, लेकिन जो मैंने पाया है वह यह है कि यह बच्चे की मेज को गिरा देता है, सभी पंक्तियों को छिपा देता है, कुछ अजीब तरह से पैडिंग जोड़ता है, और फिर स्लाइड को कॉल करने पर यह उन पंक्तियों को फिर से विस्तारित नहीं करेगा। ( 'नीचे')।
क्रिस पोर्टर

1
मैं स्लाइड शो ('ऊपर') और फिर स्लाइड ('डाउन') कॉल करते समय मजाकिया अभिनय करने वाले चाइल्ड टेबल के साथ अन्य मुद्दों में भाग गया। मुझे पता चला कि यह प्लगइन में दो बार इस्तेमाल होने वाली ('td') विधि के कारण है। मैंने इसे बच्चों ('td') में बदल दिया और समस्याएं तुरंत दूर हो गईं। वें कोशिकाओं की समस्याओं के लिए, बस बच्चों के दोनों उदाहरणों ('td') को बच्चों ('td, th') में अपडेट करें।
ओरेगॉनजेफ

4

आप पंक्ति की सामग्री को एक में <span>रखने और अपने चयनकर्ता होने की कोशिश कर सकते हैं $('#detailed_edit_row span');- थोड़ा हैकिश, लेकिन मैंने अभी इसका परीक्षण किया है और यह काम करता है। मैंने table-rowऊपर दिए गए सुझाव की भी कोशिश की और यह काम नहीं कर पाया।

अद्यतन : मैं इस समस्या के साथ खेल रहा हूं, और सभी संकेतों से jQuery को उस ऑब्जेक्ट की आवश्यकता है जो स्लाइडडाउन करता है जो एक ब्लॉक तत्व है। तो, कोई पासा नहीं। मैं एक मेज को समेटने में सक्षम था जहाँ मैंने सेल पर स्लाइडडाउन का उपयोग किया था और यह लेआउट को बिल्कुल भी प्रभावित नहीं करता था, इसलिए मुझे यकीन नहीं है कि आपका सेट कैसे है। मुझे लगता है कि आपका एकमात्र समाधान तालिका को इस तरह से रिफलेक्टर करना है कि यह ठीक है कि सेल एक ब्लॉक है, या सिर्फ .show();लानत है। सौभाग्य।


1
आप tr और td टैग को चेतन नहीं कर सकते। आपको प्रत्येक td की सामग्री को div के साथ लपेटना होगा, फिर div को चेतन करना होगा, फिर tr को छुपाना / दिखाना होगा:<td><div style="display:block">contents</div></td>
एंड्रयू

4

पंक्ति की सामग्री इस तरह चुनें:

$(row).contents().slideDown();

.contents () - मिलान किए गए तत्वों के सेट में प्रत्येक तत्व के बच्चों को प्राप्त करें, जिसमें पाठ और टिप्पणी नोड्स शामिल हैं।


आपको कॉलम भी चुनना है, इसलिए कुछ इस तरह $('tr > td').contents().slideDown()। सुनिश्चित करें कि कॉलम के अंदर की सभी सामग्री एक टैग में लिपटी हुई है, अर्थात, <td>Some text</td>काम नहीं करेगी। यह सबसे सरल उपाय है।
user2233706

3

मैं इस का जवाब देने पर समय से थोड़ा पीछे हूं, लेकिन मुझे ऐसा करने का एक तरीका मिला :)

function eventinfo(id) {
    tr = document.getElementById("ei"+id);
    div = document.getElementById("d"+id);
    if (tr.style.display == "none") {
        tr.style.display="table-row";
        $(div).slideDown('fast');
    } else {
        $(div).slideUp('fast');
        setTimeout(function(){tr.style.display="none";}, 200);
    }
}

मैं सिर्फ टेबल डेटा टैग्स के अंदर एक div एलिमेंट डालता हूं। जब यह दृश्यमान हो जाता है, जैसे ही div का विस्तार होता है, पूरी पंक्ति नीचे आ जाती है। फिर इसे फिर से फीका करने के लिए कहें (फिर टाइमआउट ताकि आप प्रभाव देखें) तालिका की पंक्ति को फिर से छिपाने से पहले :)

आशा है कि यह किसी की मदद करता है!


3

मैंने छुपी हुई पंक्तियों के साथ एक तालिका तैयार की है जो पंक्ति क्लिक पर अंदर और बाहर स्लाइड करती है।


3

नेस्टेड टेबल के साथ एक तालिका पंक्ति है:

<tr class='dummyRow' style='display: none;'>
    <td>
        <table style='display: none;'>All row content inside here</table>
    </td>
</tr>

पंक्ति को स्लाइड करने के लिए :

$('.dummyRow').show().find("table").slideDown();

नोट: पंक्ति और यह सामग्री है (यहां यह है "table") दोनों को एनीमेशन शुरू होने से पहले छिपाया जाना चाहिए ।


पंक्ति को स्लाइड करने के लिए :

$('.dummyRow').find("table").slideUp('normal', function(){$('.dummyRow').hide();});

दूसरा पैरामीटर ( function()) एक कॉलबैक है।


सरल!!

ध्यान दें कि कई विकल्प भी हैं जिन्हें स्लाइड अप / डाउन फ़ंक्शंस के मापदंडों के रूप में जोड़ा जा सकता है (सबसे आम अवधि की अवधि 'slow'और 'fast')।


क्या आपने वास्तव में अपनी सामग्री को अपनी पंक्तियों के बीच रखा था, या वह टाइपो था?
विंसेंट

2

मैं पंक्ति में td तत्वों का उपयोग करके इसके आसपास गया हूँ:

$(ui.item).children("td").effect("highlight", { color: "#4ca456" }, 1000);

पंक्ति को एनिमेट करने से ही अजीब व्यवहार होता है, जिसमें ज्यादातर ऐस्पन एनीमेशन समस्याएं होती हैं।

उपरोक्त कोड के लिए, मैं एक पंक्ति को हाइलाइट कर रहा हूं जो खींची गई है और तालिका में चारों ओर गिरा है ताकि यह उजागर हो सके कि अपडेट सफल हुआ है। आशा है कि यह किसी की मदद करता है।


मैं मिल रहा हूँeffect is not a function
Savage

2

मैंने यहां दिए गए विचारों का उपयोग किया और कुछ समस्याओं का सामना किया। मैंने उन सभी को ठीक किया और एक चिकनी एक-लाइनर साझा करना चाहूंगा।

$('#row_to_slideup').find('> td').css({'height':'0px'}).wrapInner('<div style=\"display:block;\" />').parent().find('td > div').slideUp('slow', function() {$(this).parent().parent().remove();});

यह td तत्व पर css का उपयोग करता है। यह ऊंचाई को 0px तक कम कर देता है। इस तरह से केवल प्रत्येक td तत्व के मामलों के अंदर नव निर्मित div-आवरण की सामग्री की ऊंचाई।

स्लाइडअप धीमा है। यदि आप इसे धीमा कर देते हैं तो आपको कुछ गड़बड़ महसूस हो सकती है। शुरुआत में एक छोटी छलांग। इसका कारण उल्लेखित सीएसएस सेटिंग है। लेकिन उन सेटिंग्स के बिना पंक्ति ऊंचाई में कम नहीं होगी। केवल इसकी सामग्री होगी।

अंत में tr एलिमेंट हटा दिया जाता है।

पूरी लाइन में केवल JQuery और कोई देशी जावास्क्रिप्ट शामिल नहीं है।

आशा करता हूँ की ये काम करेगा।

यहाँ एक उदाहरण कोड है:

    <html>
            <head>
                    <script src="https://code.jquery.com/jquery-3.2.0.min.js">               </script>
            </head>
            <body>
                    <table>
                            <thead>
                                    <tr>
                                            <th>header_column 1</th>
                                            <th>header column 2</th>
                                    </tr>
                            </thead>
                            <tbody>
                                    <tr id="row1"><td>row 1 left</td><td>row 1 right</td></tr>
                                    <tr id="row2"><td>row 2 left</td><td>row 2 right</td></tr>
                                    <tr id="row3"><td>row 3 left</td><td>row 3 right</td></tr>
                                    <tr id="row4"><td>row 4 left</td><td>row 4 right</td></tr>
                            </tbody>
                    </table>
                    <script>
    setTimeout(function() {
    $('#row2').find('> td').css({'height':'0px'}).wrapInner('<div style=\"display:block;\" />').parent().find('td > div').slideUp('slow',         function() {$(this).parent().parent().remove();});
    }, 2000);
                    </script>
            </body>
    </html>

यह पद ठीक दो साल पुराना है। मैंने jquery संस्करण 3.2.0 के साथ काम किया है। मैंने आज कोड 73.0.3683.75 के साथ परीक्षण किया है और इसने काम किया है।
डार्कविंड

1

मैं पूरी तरह से स्लाइड करना चाहता हूं और मैंने फीका और स्लाइड प्रभाव के संयोजन से इस समस्या को प्रबंधित किया है।

मैंने इसे 3 चरणों में किया है (यदि आप नीचे या ऊपर स्लाइड करना चाहते हैं तो दूसरे और तीसरे चरण को बदल दिया जाता है)

  1. Tbody को ऊंचाई सौंपना,
  2. लुप्त होती सभी td और th,
  3. फिसलने वाला।

स्लाइडअप का उदाहरण:

tbody.css('height', tbody.css('height'));
tbody.find('td, th').fadeOut(200, function(){
    tbody.slideUp(300)
});

क्या यह केवल एक विशेष पंक्ति के बजाय पूरी तालिका को प्रभावित नहीं करता है?
सेवेज

1

मुझे पेश किए गए अन्य सभी समाधानों के साथ समस्या थी, लेकिन मक्खन के रूप में चिकनी यह सरल काम कर रही है।

अपना HTML ऐसा सेट करें:

<tr id=row1 style='height:0px'><td>
  <div id=div1 style='display:none'>
    Hidden row content goes here
  </div>
</td></tr>

फिर अपनी जावास्क्रिप्ट को इस तरह सेट करें:

function toggleRow(rowid){
  var row = document.getElementById("row" + rowid)

  if(row.style.height == "0px"){
      $('#div' + rowid).slideDown('fast');
      row.style.height = "1px";   
  }else{
      $('#div' + rowid).slideUp('fast');
      row.style.height = "0px";   
  } 
}

मूल रूप से, "इनविजिबल" पंक्ति 0px ऊंची बनाएं, अंदर एक div के साथ।
Div (पंक्ति नहीं) पर एनीमेशन का उपयोग करें और फिर पंक्ति की ऊंचाई 1px पर सेट करें।

पंक्ति को फिर से छिपाने के लिए, div पर विपरीत एनीमेशन का उपयोग करें और पंक्ति की ऊँचाई को 0px पर सेट करें।


1

मुझे वह प्लगइन पसंद आया जो विन्नी का लिखा और उपयोग कर रहा है। लेकिन स्लाइडिंग रो (ट्र / td) के अंदर तालिकाओं के मामले में, नेस्टेड टेबल की पंक्तियाँ हमेशा स्लाइड करने के बाद भी छिपी रहती हैं। इसलिए मैंने नेस्टेड टेबल की पंक्तियों को छिपाने के लिए प्लगइन में एक त्वरित और सरल हैक किया। बस निम्नलिखित लाइन बदलें

var $cells = $(this).find('td');

सेवा

var $cells = $(this).find('> td');

जो केवल तत्काल tds पाता है जो किसी के पास नहीं है। आशा है कि यह प्लगइन का उपयोग करने में किसी की मदद करता है और इसमें नेस्टेड टेबल होते हैं।


1

मैं # विन्नी के पोस्ट पर एक टिप्पणी जोड़ना चाहूंगा, लेकिन न ही निरसन है इसलिए उत्तर पोस्ट करना होगा ...

अपने प्लगइन के साथ एक बग मिला - जब आप सिर्फ एक तर्क के साथ एक वस्तु पास करते हैं तो वे ओवरराइट हो जाते हैं यदि कोई अन्य तर्क पारित नहीं होते हैं। आसानी से हल करके उस क्रम को बदल दिया जाता है जब तर्क संसाधित होते हैं, नीचे कोड। मैंने समापन के बाद पंक्ति को नष्ट करने के लिए एक विकल्प भी जोड़ा है (केवल इसके लिए मुझे इसकी आवश्यकता थी!): $ ('# Row_id')। SlideRow ('up', true); // पंक्ति को नष्ट कर देता है

(function ($) {
    var sR = {
        defaults: {
            slideSpeed: 400,
            easing: false,
            callback: false
        },
        thisCallArgs: {
            slideSpeed: 400,
            easing: false,
            callback: false,
            destroyAfterUp: false
        },
        methods: {
            up: function (arg1, arg2, arg3) {
                if (typeof arg2 == 'string') {
                    sR.thisCallArgs.easing = arg2;
                } else if (typeof arg2 == 'function') {
                    sR.thisCallArgs.callback = arg2;
                } else if (typeof arg2 == 'undefined') {
                    sR.thisCallArgs.easing = sR.defaults.easing;
                }
                if (typeof arg3 == 'function') {
                    sR.thisCallArgs.callback = arg3;
                } else if (typeof arg3 == 'undefined' && typeof arg2 != 'function') {
                    sR.thisCallArgs.callback = sR.defaults.callback;
                }
                if (typeof arg1 == 'object') {
                    for (p in arg1) {
                        sR.thisCallArgs[p] = arg1[p];
                    }
                } else if (typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')) {
                    sR.thisCallArgs.slideSpeed = arg1;
                } else if (typeof arg1 != 'undefined' && (typeof arg1 == 'boolean')) {
                    sR.thisCallArgs.destroyAfterUp = arg1;
                } else {
                    sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
                }

                var $row = $(this);
                var $cells = $row.children('th, td');
                $cells.wrapInner('<div class="slideRowUp" />');
                var currentPadding = $cells.css('padding');
                $cellContentWrappers = $(this).find('.slideRowUp');
                $cellContentWrappers.slideUp(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing).parent().animate({
                    paddingTop: '0px',
                    paddingBottom: '0px'
                }, {
                    complete: function () {
                        $(this).children('.slideRowUp').replaceWith($(this).children('.slideRowUp').contents());
                        $(this).parent().css({ 'display': 'none' });
                        $(this).css({ 'padding': currentPadding });
                    }
                });
                var wait = setInterval(function () {
                    if ($cellContentWrappers.is(':animated') === false) {
                        clearInterval(wait);
                        if (sR.thisCallArgs.destroyAfterUp)
                        {
                            $row.replaceWith('');
                        }
                        if (typeof sR.thisCallArgs.callback == 'function') {
                            sR.thisCallArgs.callback.call(this);
                        }
                    }
                }, 100);
                return $(this);
            },
            down: function (arg1, arg2, arg3) {

                if (typeof arg2 == 'string') {
                    sR.thisCallArgs.easing = arg2;
                } else if (typeof arg2 == 'function') {
                    sR.thisCallArgs.callback = arg2;
                } else if (typeof arg2 == 'undefined') {
                    sR.thisCallArgs.easing = sR.defaults.easing;
                }
                if (typeof arg3 == 'function') {
                    sR.thisCallArgs.callback = arg3;
                } else if (typeof arg3 == 'undefined' && typeof arg2 != 'function') {
                    sR.thisCallArgs.callback = sR.defaults.callback;
                }
                if (typeof arg1 == 'object') {
                    for (p in arg1) {
                        sR.thisCallArgs.eval(p) = arg1[p];
                    }
                } else if (typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')) {
                    sR.thisCallArgs.slideSpeed = arg1;
                } else {
                    sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
                }

                var $cells = $(this).children('th, td');
                $cells.wrapInner('<div class="slideRowDown" style="display:none;" />');
                $cellContentWrappers = $cells.find('.slideRowDown');
                $(this).show();
                $cellContentWrappers.slideDown(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing, function () { $(this).replaceWith($(this).contents()); });

                var wait = setInterval(function () {
                    if ($cellContentWrappers.is(':animated') === false) {
                        clearInterval(wait);
                        if (typeof sR.thisCallArgs.callback == 'function') {
                            sR.thisCallArgs.callback.call(this);
                        }
                    }
                }, 100);
                return $(this);
            }
        }
    };

    $.fn.slideRow = function (method, arg1, arg2, arg3) {
        if (typeof method != 'undefined') {
            if (sR.methods[method]) {
                return sR.methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
            }
        }
    };
})(jQuery);

उल्लेख करना भूल गया कि मैंने बच्चों और वें सुधारों में भी जोड़ा है
मार्क बॉल

0

यदि आपको एक ही समय में एक तालिका पंक्ति को स्लाइड और फीका करने की आवश्यकता है, तो इनका उपयोग करके देखें:

jQuery.fn.prepareTableRowForSliding = function() {
    $tr = this;
    $tr.children('td').wrapInner('<div style="display: none;" />');
    return $tr;
};

jQuery.fn.slideFadeTableRow = function(speed, easing, callback) {
    $tr = this;
    if ($tr.is(':hidden')) {
        $tr.show().find('td > div').animate({opacity: 'toggle', height: 'toggle'}, speed, easing, callback);
    } else {
        $tr.find('td > div').animate({opacity: 'toggle', height: 'toggle'}, speed, easing, function(){
            $tr.hide();
            callback();
        });
    }
    return $tr;
};

$(document).ready(function(){
    $('tr.special').hide().prepareTableRowForSliding();
    $('a.toggle').toggle(function(){
        $button = $(this);
        $tr = $button.closest('tr.special'); //this will be specific to your situation
        $tr.slideFadeTableRow(300, 'swing', function(){
            $button.text('Hide table row');
        });
    }, function(){
        $button = $(this);
        $tr = $button.closest('tr.special'); //this will be specific to your situation
        $tr.slideFadeTableRow(300, 'swing', function(){
            $button.text('Display table row');
        });
});
});

0
function hideTr(tr) {
  tr.find('td').wrapInner('<div style="display: block;" />').parent().find('td > div').slideUp(50, function () {
    tr.hide();
    var $set = jQuery(this);
    $set.replaceWith($set.contents());
  });
}

function showTr(tr) {
  tr.show()
  tr.find('td').wrapInner('<div style="display: none;" />').parent().find('td > div').slideDown(50, function() {
    var $set = jQuery(this);
    $set.replaceWith($set.contents());
  });
}

आप इन विधियों का उपयोग कर सकते हैं जैसे:

jQuery("[data-toggle-tr-trigger]").click(function() {
  var $tr = jQuery(this).parents(trClass).nextUntil(trClass);
  if($tr.is(':hidden')) {
    showTr($tr);
  } else {
    hideTr($tr);
  }
});

0

यदि आप पंक्ति में td की संख्या निर्धारित करते हैं तो आप एक ही समय में कोई भी प्रदर्शित करने के लिए नहीं कर सकते हैं यदि आप पंक्ति में ऊँचाई को देखना शुरू करते हैं

tbody tr{
    min-height: 50px;
}
tbody tr.ng-hide td{
    display: none;
}
tr.hide-line{
    -moz-transition: .4s linear all;
    -o-transition: .4s linear all;
    -webkit-transition: .4s linear all;
    transition: .4s linear all;
    height: 50px;
    overflow: hidden;

    &.ng-hide { //angularJs specific
        height: 0;
        min-height: 0;
    }
}

0

यह कोड काम करता है!

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8" />
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <title></title>
        <script>
            function addRow() {
                $('.displaynone').show();
                $('.displaynone td')
                .wrapInner('<div class="innerDiv" style="height:0" />');
                $('div').animate({"height":"20px"});
            }
        </script>
        <style>
            .mycolumn{border: 1px solid black;}
            .displaynone{display: none;}
        </style>
    </head>
    <body>
        <table align="center" width="50%">
            <tr>
                <td class="mycolumn">Row 1</td>
            </tr>
            <tr>
                <td class="mycolumn">Row 2</td>
            </tr>
            <tr class="displaynone">
                <td class="mycolumn">Row 3</td>
            </tr>
            <tr>
                <td class="mycolumn">Row 4</td>
            </tr>
        </table>
        <br>
        <button onclick="addRow();">add</button>    
    </body>
</html>

0

http://jsfiddle.net/PvwfK/136/

<table cellspacing='0' cellpadding='0' class='table01' id='form_table' style='width:100%;'>
<tr>
    <td style='cursor:pointer; width:20%; text-align:left;' id='header'>
        <label style='cursor:pointer;'> <b id='header01'>▲ Customer Details</b>

        </label>
    </td>
</tr>
<tr>
    <td style='widtd:20%; text-align:left;'>
        <div id='content' class='content01'>
            <table cellspacing='0' cellpadding='0' id='form_table'>
                <tr>
                    <td>A/C ID</td>
                    <td>:</td>
                    <td>3000/A01</td>
                </tr>
                <tr>
                    <td>A/C ID</td>
                    <td>:</td>
                    <td>3000/A01</td>
                </tr>
                <tr>
                    <td>A/C ID</td>
                    <td>:</td>
                    <td>3000/A01</td>
                </tr>
            </table>
        </div>
    </td>
</tr>

$(function () {
$(".table01 td").on("click", function () {
    var $rows = $('.content01');
    if ($(".content01:first").is(":hidden")) {
        $("#header01").text("▲ Customer Details");
        $(".content01:first").slideDown();
    } else {
        $("#header01").text("▼ Customer Details");
        $(".content01:first").slideUp();
    }
});

});


यह दिखाता है और एक डिव को छुपाता है जिसमें एक टेबल है। ओपी ने पूछा कि टेबल की पंक्ति नहीं है।
शोबोट

0

विन्नी द्वारा पेश किया गया प्लग वास्तव में करीब है, लेकिन मैंने कुछ छोटे मुद्दों को ढूंढा और उन्हें ठीक किया।

  1. यह लालच से लक्षित तत्वों को छिपा रहा है कि पंक्ति के सिर्फ बच्चे ही छिपे हुए हैं। यह ठीक होता अगर यह पंक्ति दिखाने के बाद उन बच्चों की तलाश की जाती। जबकि यह करीब हो गया, वे सभी उन पर "प्रदर्शन: कोई नहीं" के साथ समाप्त हो गए, उन्हें छिपाकर प्रस्तुत किया।
  2. यह बिल्कुल बच्चे के तत्वों को लक्षित नहीं करता था।
  3. बहुत सारे कंटेंट वाली टेबल सेल के लिए (जैसे बहुत सी पंक्तियों के साथ नेस्टेड टेबल), स्लाइडरॉव ('अप'), स्लाइडशेड वैल्यू की परवाह किए बिना, यह पैडिंग एनीमेशन के होते ही पंक्ति के दृश्य को ध्वस्त कर देगा। । मैंने इसे तय किया ताकि पैडिंग एनीमेशन तब तक ट्रिगर न हो जब तक कि रैपअप पर स्लाइडअप () विधि नहीं की जाती है।

    (function($){
        var sR = {
            defaults: {
                slideSpeed: 400
              , easing: false
              , callback: false
            }
          , thisCallArgs:{
                slideSpeed: 400
              , easing: false
              , callback: false
            }
          , methods:{
                up: function(arg1, arg2, arg3){
                    if(typeof arg1 == 'object'){
                        for(p in arg1){
                            sR.thisCallArgs.eval(p) = arg1[p];
                        }
                    }else if(typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')){
                        sR.thisCallArgs.slideSpeed = arg1;
                    }else{
                        sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
                    }
    
                    if(typeof arg2 == 'string'){
                        sR.thisCallArgs.easing = arg2;
                    }else if(typeof arg2 == 'function'){
                        sR.thisCallArgs.callback = arg2;
                    }else if(typeof arg2 == 'undefined'){
                        sR.thisCallArgs.easing = sR.defaults.easing;    
                    }
                    if(typeof arg3 == 'function'){
                        sR.thisCallArgs.callback = arg3;
                    }else if(typeof arg3 == 'undefined' && typeof arg2 != 'function'){
                        sR.thisCallArgs.callback = sR.defaults.callback;    
                    }
                    var $cells = $(this).children('td, th');
                    $cells.wrapInner('<div class="slideRowUp" />');
                    var currentPadding = $cells.css('padding');
                    $cellContentWrappers = $(this).find('.slideRowUp');
                    $cellContentWrappers.slideUp(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing, function(){
                        $(this).parent().animate({ paddingTop: '0px', paddingBottom: '0px' }, {
                            complete: function(){
                                $(this).children('.slideRowUp').replaceWith($(this).children('.slideRowUp').contents());
                                $(this).parent().css({ 'display': 'none' });
                                $(this).css({ 'padding': currentPadding });
                            }
                        });
                    });
                    var wait = setInterval(function(){
                        if($cellContentWrappers.is(':animated') === false){
                            clearInterval(wait);
                            if(typeof sR.thisCallArgs.callback == 'function'){
                                sR.thisCallArgs.callback.call(this);
                            }
                        }
                    }, 100);                                                                                                    
                    return $(this);
                }
              , down: function (arg1, arg2, arg3){
                    if(typeof arg1 == 'object'){
                        for(p in arg1){
                            sR.thisCallArgs.eval(p) = arg1[p];
                        }
                    }else if(typeof arg1 != 'undefined' && (typeof arg1 == 'number' || arg1 == 'slow' || arg1 == 'fast')){
                        sR.thisCallArgs.slideSpeed = arg1;
                    }else{
                        sR.thisCallArgs.slideSpeed = sR.defaults.slideSpeed;
                    }
    
                    if(typeof arg2 == 'string'){
                        sR.thisCallArgs.easing = arg2;
                    }else if(typeof arg2 == 'function'){
                        sR.thisCallArgs.callback = arg2;
                    }else if(typeof arg2 == 'undefined'){
                        sR.thisCallArgs.easing = sR.defaults.easing;    
                    }
                    if(typeof arg3 == 'function'){
                        sR.thisCallArgs.callback = arg3;
                    }else if(typeof arg3 == 'undefined' && typeof arg2 != 'function'){
                        sR.thisCallArgs.callback = sR.defaults.callback;    
                    }
                    var $cells = $(this).children('td, th');
                    $cells.wrapInner('<div class="slideRowDown" style="display:none;" />');
                    $cellContentWrappers = $cells.find('.slideRowDown');
                    $(this).show();
                    $cellContentWrappers.slideDown(sR.thisCallArgs.slideSpeed, sR.thisCallArgs.easing, function() { $(this).replaceWith( $(this).contents()); });
    
                    var wait = setInterval(function(){
                        if($cellContentWrappers.is(':animated') === false){
                            clearInterval(wait);
                            if(typeof sR.thisCallArgs.callback == 'function'){
                                sR.thisCallArgs.callback.call(this);
                            }
                        }
                    }, 100);
                    return $(this);
                }
            }
        };
    
        $.fn.slideRow = function(method, arg1, arg2, arg3){
            if(typeof method != 'undefined'){
                if(sR.methods[method]){
                    return sR.methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
                }
            }
        };
    })(jQuery);

@ सर्कसट्री, क्या आपके पास कुछ विशिष्ट पेशकश करने के लिए है या आपकी आलोचना पर्याप्त है?
ओरेगॉनजेफ

@Oregoneff सिर्फ ईमानदार होना। मुझे कुछ सरल लग रहा है। तालिका पंक्ति को स्लाइड करने के लिए 109 पंक्तियों का कोड नहीं होना चाहिए।
सर्किटरी

यदि आप एक गति के रूप में उपयोग करना चाहते हैं (और न केवल उपयोग-विशिष्ट कोड के बुरे अभ्यास में संलग्न होना चाहते हैं) को सरल बनाने में आसान हो जाता है, बल्कि एक अनुकूलन पर गति, सहजता और कॉलबैक को नियंत्रित करने की क्षमता के साथ। आधार। चूंकि यह कुछ ऐसा है जिसे आप अपने कोड लाइब्रेरी में शामिल करेंगे और इसका उपयोग किसी भी कार्यान्वयन के लिए किया जा सकता है जिसके लिए विस्तार / पतन तालिका पंक्तियों की आवश्यकता होती है, मुझे यकीन नहीं है कि यह मायने रखता है कि यह कोड की 109 लाइनें हैं।
ओरेगॉनजेफ

0

त्वरित / आसान तय:

JQuery का उपयोग करें। टॉगल ()पंक्ति या एंकर या तो की पंक्तियों को दिखाने / छिपाने के लिए का ।

एक फ़ंक्शन को उन पंक्तियों की पहचान करने के लिए लिखा जाना चाहिए जिन्हें आप छिपाना चाहते हैं, लेकिन टॉगल वह कार्यक्षमता बनाता है जिसे आप खोज रहे हैं।


मुझे लगता है कि इस जवाब में यह पहले से ही सुझाया गया था ...
डार्ककाइग्नस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.