এইচটিএমএল সারণীতে কলামটি লুকান / দেখান


146

আমার বেশ কয়েকটি কলাম সহ একটি এইচটিএমএল টেবিল রয়েছে এবং আমার jquery ব্যবহার করে একটি কলাম পছন্দকারী প্রয়োগ করতে হবে। যখন কোনও ব্যবহারকারী একটি চেকবক্সে ক্লিক করেন আমি টেবিলের সাথে সম্পর্কিত কলামটি লুকিয়ে / দেখাতে চাই। আমি টেবিলের প্রতিটি টিডিতে একটি ক্লাস সংযুক্ত না করে এটি করতে চাই, jquery ব্যবহার করে একটি সম্পূর্ণ কলাম নির্বাচন করার কোনও উপায় আছে কি? নীচে HTML এর উদাহরণ দেওয়া আছে।

<table>
    <thead>
        <tr><th class="col1">Header 1</th><th class="col2">Header 2</th><th class="col3">Header 3</th></tr>
    </thead>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>

<form>
    <input type="checkbox" name="col1" checked="checked" /> Hide/Show Column 1 <br />
    <input type="checkbox" name="col2" checked="checked" /> Hide/Show Column 2 <br />
    <input type="checkbox" name="col3" checked="checked" /> Hide/Show Column 3 <br />
</form>

2
আমি আশা করি

আমি jQuery ব্যবহার করে এই সমাধানটি প্রয়োগ করেছি এবং এটি আমার জন্য পুরোপুরি কাজ করেছে: http://www.devcurry.com/2009/07/hide-table-column-with-single-line-of.html
হারুন

1
ব্যবহারকারী 344059 এর মন্তব্যে, ভাঙা লিঙ্কটির জন্য ওয়েব সংরক্ষণাগারটি এখানে রয়েছে http://www.fiendish.demon.co.uk/html/javascript/hidetablecols.html
কাইলমিট

উত্তর:


84

আমি প্রতিটি টিডিতে কোনও ক্লাস সংযুক্ত না করে এটি করতে চাই

ব্যক্তিগতভাবে, আমি ক্লাস-অন-প্রতিটি-টিডি / তম / কর্নের পদ্ধতির সাথে যাব। তারপরে আপনি স্টাইলের নিয়মগুলি অনুমান করে ধারকটিতে ক্লাসনেমে একক লেখার সাহায্যে কলামগুলি চালু বা বন্ধ করতে পারেন:

table.hide1 .col1 { display: none; }
table.hide2 .col2 { display: none; }
...

এটি কোনও জেএস লুপ পদ্ধতির চেয়ে দ্রুত হতে চলেছে; সত্যিই দীর্ঘ টেবিলগুলির জন্য এটি প্রতিক্রিয়াশীলতার ক্ষেত্রে একটি উল্লেখযোগ্য পার্থক্য করতে পারে।

আপনি যদি আই 6 সমর্থন না করে পালিয়ে যেতে পারেন তবে আপনি সংলগ্ন নির্বাচকদের টিডিএসে শ্রেণি বৈশিষ্ট্য যুক্ত করতে এড়াতে ব্যবহার করতে পারেন। অথবা বিকল্প হিসাবে, যদি আপনার উদ্বেগটি মার্কআপ ক্লিনার করে তোলে তবে আপনি এটিকে জাভাস্ক্রিপ্ট থেকে আরম্ভের পদক্ষেপে স্বয়ংক্রিয়ভাবে যুক্ত করতে পারেন।


7
পরামর্শের জন্য ধন্যবাদ, আমি এইচটিএমএল ক্লিনার রাখতে চেয়েছিলাম, তবে টেবিলের আকারটি 100 টি সারি কাছে যাওয়ার কারণে কার্য সম্পাদন অবশ্যই একটি সমস্যা হয়ে দাঁড়িয়েছিল। এই সমাধানটি, 2-5x কর্মক্ষমতা উন্নতি সরবরাহ করে।
ব্রায়ান ফিশার

2
এই পদ্ধতিটি আমার জন্য আশ্চর্য কাজ করেছে, পারফরম্যান্স-ভিত্তিক। ধন্যবাদ!
20 এ 28

4
আমি আমার CSS এটিকে জুড়েছে .hidden {display:none;}এবং ব্যবহৃত .addClass('hidden')এবং .removeClass('hidden')যা চেয়ে একটু দ্রুততর ছিল .hide()এবং .show()
স্টাইলে

247

JQuery ব্যবহার করে কোডের একটি লাইন যা দ্বিতীয় কলামটি লুকায়:

$('td:nth-child(2)').hide();

যদি আপনার টেবিলে শিরোনাম (তম) থাকে তবে এটি ব্যবহার করুন:

$('td:nth-child(2),th:nth-child(2)').hide();

উত্স: jQuery কোডের একক লাইন সহ একটি সারণী কলামটি লুকান

কোডটি পরীক্ষা করতে jsFizz: http://jsfiddle.net/mgMem/1/


আপনি যদি কোনও ভাল ব্যবহারের ক্ষেত্রে দেখতে চান তবে আমার ব্লগ পোস্টটি একবার দেখুন:

একটি টেবিল কলামটি লুকান এবং jQuery এর সাথে মানের ভিত্তিতে সারিগুলিকে রঙিন করুন


1
একটি উদাহরণ হিসাবে তারা উদাহরণে না থাকায়, এমন কোনও সমস্যা নেই যা এই কলস্প্যানদের উপেক্ষা করে? আপনি যদি সেগুলি ব্যবহার না করেন তবে ভাল। এর সাথে সম্পর্কিত আরও একটি প্রশ্ন রয়েছে: স্ট্যাকওভারফ্লো.com
কিম আর

2
পেজারের সাহায্যে পাদলেখগুলি লুকানো এড়াতে আমাকে নির্বাচকের সাথে টডি যুক্ত করতে হয়েছিল: $ ('। ওয়েবগ্রিড টিডি টিডি: নবম-শিশু (1), ওয়েবেগ্রিড থ্রি: নবম-শিশু (1)') লুকান ();
অ্যালেক্স

@KimR এই colspan সমস্যার জন্য সাহায্য করতে পারে stackoverflow.com/questions/9623601/...
yunzen

আমি ঠিক জানি না কেন তবে এটিকে কাজ করতে আমাকে পরিবর্তে 'নবম ধরণের' ব্যবহার করতে হয়েছিল। উদাহরণস্বরূপ: $ ('টেবিল টিডি: nth-of-type (2)')। লুকান ();
লিওপোলোডো সান্জিক

@ লিওপল্ডোসানজিক আপনি কি সাফারি ব্যবহার করছেন? দেখে মনে হচ্ছে এটির মতো প্রকারের দরকার
ইয়েকে রেইনস্টেট মনিকা

12

আপনি কলগ্রুপ ব্যবহার করতে পারেন:

<table>
    <colgroup>
       <col class="visible_class"/>
       <col class="visible_class"/>
       <col class="invisible_class"/>  
    </colgroup>
    <thead>
        <tr><th class="col1">Header 1</th><th class="col2">Header 2</th><th class="col3">Header 3</th></tr>
    </thead>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
    <tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>

আপনার স্ক্রিপ্টটি কেবল আকাঙ্ক্ষার <col>শ্রেণিতে পরিবর্তন করতে পারে ।


আমার মনে হচ্ছে কলগ্রুপের ক্রস ব্রাউজার সমর্থন না থাকা কি আর সত্য নয়?
ব্রায়ান ফিশার

হতে পারে. আমি এই পদ্ধতিটি হিলাইট কলামগুলির জন্য ব্যবহার করছি, (ফায়ারফক্স, সাফারি, ক্রোম সূক্ষ্মভাবে কাজ করে) কখনই আইই-তে চেষ্টা করে দেখেনি।
লুইস মেলগ্র্যাতি

@ ব্রায়ান - আইই 8 কাজ করে না এবং আই 8 সক্ষম হওয়া আইই 8 কাজ করছে বলে মনে হচ্ছে।
নর্ডেস

4
এটি আধুনিক ব্রাউজারে (ক্রোম এবং ফায়ারফক্স) আর কাজ করবে না বলে মনে হচ্ছে
জেবিই

@ জেবিই: সুনির্দিষ্টভাবে বলতে গেলে, এটি কিছুটা আধুনিক ব্রাউজারগুলিতে কাজ করে । JQuery নির্বাচক ব্যবহার করে আপনি এখনও পুরো কলামের পটভূমির রঙের মতো স্মিট সেট করতে পারেন তবে আপনি আর কলামের দৃশ্যমানতা টগল করতে পারবেন না। পরীক্ষিত ব্রাউজারগুলি হলেন এমএসআইই 11 , সাফারি 5 , ক্রোমিয়াম 44 , অপেরা 12 , মজিলা সিমনকি 2.40 , মজিলা ফায়ারফক্স 43 । "এইচটিএমএল 4.01 এর বেশিরভাগ বৈশিষ্ট্য এইচটিএমএল 5 তে সমর্থিত নয়" - এখানে দেখুন$('table > colgroup > col.yourClassHere')
বাস

11

নিম্নলিখিত এটি করা উচিত:

$("input[type='checkbox']").click(function() {
    var index = $(this).attr('name').substr(2);
    $('table tr').each(function() { 
        $('td:eq(' + index + ')',this).toggle();
    });
});

এটি অনির্ধারিত কোড, তবে নীতিটি হ'ল আপনি প্রতিটি সারিতে টেবিল ঘরটি চয়ন করেন যা চেকবক্সের নাম থেকে উত্তোলিত নির্বাচিত সূচকের সাথে মিলে যায়। আপনি অবশ্যই নির্বাচকদের ক্লাস বা একটি আইডি দিয়ে সীমাবদ্ধ করতে পারেন।


11

এখানে আরও কিছু সম্পূর্ণরূপে বৈশিষ্ট্যযুক্ত উত্তর যা প্রতি কলাম ভিত্তিতে কিছু ব্যবহারকারীর ইন্টারঅ্যাকশন সরবরাহ করে। যদি এটি একটি গতিশীল অভিজ্ঞতা হতে চলেছে তবে প্রতিটি কলামে ক্লিকযোগ্য টগল থাকা দরকার যা কলামটি আড়াল করার দক্ষতা এবং তারপরে পূর্বে লুকানো কলামগুলি পুনরুদ্ধার করার উপায় বলে indicates

এটি জাভাস্ক্রিপ্টে এর মতো দেখতে লাগবে:

$('.hide-column').click(function(e){
  var $btn = $(this);
  var $cell = $btn.closest('th,td')
  var $table = $btn.closest('table')

  // get cell location - https://stackoverflow.com/a/4999018/1366033
  var cellIndex = $cell[0].cellIndex + 1;

  $table.find(".show-column-footer").show()
  $table.find("tbody tr, thead tr")
        .children(":nth-child("+cellIndex+")")
        .hide()
})

$(".show-column-footer").click(function(e) {
    var $table = $(this).closest('table')
    $table.find(".show-column-footer").hide()
    $table.find("th, td").show()

})

এটি সমর্থন করার জন্য, আমরা টেবিলটিতে কিছু মার্কআপ যুক্ত করব। প্রতিটি কলামের শিরোনামে, আমরা ক্লিকযোগ্য কোনও জিনিসের ভিজ্যুয়াল ইন্ডিকেটর সরবরাহ করতে এর মতো কিছু যুক্ত করতে পারি

<button class="pull-right btn btn-default btn-condensed hide-column" 
            data-toggle="tooltip" data-placement="bottom" title="Hide Column">
    <i class="fa fa-eye-slash"></i>  
</button>

আমরা ব্যবহারকারীর টেবিল ফুটারের একটি লিঙ্কের মাধ্যমে কলামগুলি পুনরুদ্ধার করার অনুমতি দেব। যদি এটি ডিফল্টরূপে অবিচল থাকে না, তবে এটিতে শিরোনামে গতিশীলভাবে টগল করা টেবিলের চারপাশে ঝাঁকুনি দিতে পারে, তবে আপনি এটি যে কোনও জায়গায় চান তা সত্যিই রাখতে পারেন:

<tfoot class="show-column-footer">
   <tr>
    <th colspan="4"><a class="show-column" href="#">Some columns hidden - click to show all</a></th>
  </tr>
</tfoot>

এটিই মূল কার্যকারিতা। আরও কয়েকটি জিনিস ভেসে উঠার সাথে নীচে একটি ডেমো এখানে দেওয়া হয়েছে। আপনি এর উদ্দেশ্যটি স্পষ্ট করতে বাটনটিতে একটি টুলটিপ যোগ করতে পারেন, টেবিল শিরোনামটিতে কিছুটা আরও জৈবিকভাবে বোতামটি স্টাইল করুন এবং কিছুটা (কিছুটা উইঙ্কি) সিএসএস অ্যানিমেশন যুক্ত করার জন্য কলামটির প্রস্থটি ভেঙে কিছুটা কমিয়ে আনতে পারেন লাফানে।

ডেমো স্ক্রিনগ্র্যাব

জেফিডাল এবং স্ট্যাক স্নিপেটে ডেমো কাজ করছে :


আপনি নিকটতম 1 কলামটি গোপন করছেন, কিভাবে নিকটতম 3 কলামটি লুকান?
নির্মল গোস্বামী

- আমার টেবিল পরীক্ষা i.stack.imgur.com/AA8iZ.png এবং প্রশ্ন যা টেবিল এইচটিএমএল ধারণ - stackoverflow.com/questions/50838119/... বোতাম এ, বি এবং C সঙ্গে আসতে চায়
নির্মল গোস্বামী

এইরকম একটি পুরানো উত্তরটি পুনরুদ্ধার করার জন্য দুঃখিত, তবে ডিফল্টরূপে কিছু কলামগুলি গোপনে সেট করার সহজ উপায় কি আছে? আমি এটি করার চেষ্টা করছি $(document).readyতবে ভাগ্য নেই
রোবটজহনি

1
@ রোবটজহনি, ভাল প্রশ্ন। এটি .hide-colকলামগুলি সরিয়ে ফেলতে শ্রেণিটি ব্যবহার করছে , তবে এটি পাশাপাশি অবস্থা নির্দেশ করতেও ব্যবহৃত হতে পারে, সুতরাং আপনি হয় - .hide-colপ্রতিটিটিতে যুক্ত করতে পারেন td& trএইচটিএমএল রেন্ডার করার পরে সম্পন্ন হয়ে যান। অথবা আপনি যদি এটি কম জায়গায় যুক্ত করতে চান তবে এটি শিরোনামে রেখে দিন (সেই রাষ্ট্রটি কোথাও যেতে হবে), এবং প্রাথমিকভাবে, শিশুদের জুড়ে সেই কলাম সূচীটি লুকানোর জন্য এটি ব্যবহার করুন। বর্তমানে কোডটি কেবল ক্লিকের পজিশনের জন্যই শুনছে, তবে এটি ক্লাস পজিশনের জন্যও পরিবর্তন করা যেতে পারে। এছাড়াও, শুভ টার্কি দিবস
কাইলমিত

1
@ রোবটজহনি, আমি আরম্ভের হ্যান্ডলিংয়ের অন্তর্ভুক্ত করার জন্য কোড নমুনা আপডেট করেছি। class='hide-col'আপনার এইচটিএমএল-এ আপনি যে কোনও জায়গাতেই ড্রপ করুন (সম্ভবত thead > tr > thএটি সবচেয়ে
সার্থকভাবে

4

এবং অবশ্যই, CSS সমর্থন করে এমন ব্রাউজারগুলির একমাত্র উপায় nth-child:

table td:nth-child(2) { display: none; }

এটি আইই 9 এবং আরও নতুনদের জন্য।

আপনার ব্যবহারের জন্য, কলামগুলি আড়াল করার জন্য আপনার কয়েকটি শ্রেণির প্রয়োজন:

.hideCol1 td:nth-child(1) { display: none;}
.hideCol2 td:nth-child(2) { display: none;}

ect, ...


2

নীচে কয়েকটি ছোটখাট পরিবর্তন সহ ইরানের কোড তৈরি করা হচ্ছে। এটি পরীক্ষা করা হয়েছে এবং এটি ফায়ারফক্স 3, আই 7-তে দুর্দান্ত কাজ করছে বলে মনে হচ্ছে।

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<script>
$(document).ready(function() {
    $('input[type="checkbox"]').click(function() {
        var index = $(this).attr('name').substr(3);
        index--;
        $('table tr').each(function() { 
            $('td:eq(' + index + ')',this).toggle();
        });
        $('th.' + $(this).attr('name')).toggle();
    });
});
</script>
<body>
<table>
<thead>
    <tr>
        <th class="col1">Header 1</th>
        <th class="col2">Header 2</th>
        <th class="col3">Header 3</th>
    </tr>
</thead>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
<tr><td>Column1</td><td>Column2</td><td>Column3</td></tr>
</table>

<form>
    <input type="checkbox" name="col1" checked="checked" /> Hide/Show Column 1 <br />
    <input type="checkbox" name="col2" checked="checked" /> Hide/Show Column 2 <br />
    <input type="checkbox" name="col3" checked="checked" /> Hide/Show Column 3 <br />
</form>
</body>
</html>

1
<p><input type="checkbox" name="ch1" checked="checked" /> First Name</p>
.... 
<td class="ch1">...</td>

 <script>
       $(document).ready(function() {
            $('#demo').multiselect();
        });


        $("input:checkbox:not(:checked)").each(function() {
    var column = "table ." + $(this).attr("name");
    $(column).hide();
});

$("input:checkbox").click(function(){
    var column = "table ." + $(this).attr("name");
    $(column).toggle();
});
 </script>

0

ক্লাস ছাড়া? আপনি তখন ট্যাগটি ব্যবহার করতে পারেন:

var tds = document.getElementsByTagName('TD'),i;
for (i in tds) {
  tds[i].style.display = 'none';
}

এবং তাদের ব্যবহার দেখানোর জন্য:

...style.display = 'table-cell';            
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.