একটি বৃহত টেবিল দেখার সময় উইন্ডোটির শীর্ষে এইচটিএমএল সারণি শিরোনামগুলি সর্বদা দৃশ্যমান


169

আমি একটি বৈশিষ্ট্য যুক্ত করতে কোনও এইচটিএমএল টেবিলের উপস্থাপনাটিকে "টুইঙ্ক" করতে সক্ষম হতে চাই: পৃষ্ঠার মাধ্যমে স্ক্রল করার সময় যাতে টেবিলটি স্ক্রিনে থাকে তবে শিরোনামের সারিগুলি অফ স্ক্রিনে থাকে, আমি শিরোনামগুলি থেকে যেতে চাই দেখার ক্ষেত্রের শীর্ষে দৃশ্যমান।

এটি এক্সেলের মধ্যে "ফ্রিজে প্যানগুলি" বৈশিষ্ট্যের মতো ধারণাগত হবে। তবে, এইচটিএমএল পৃষ্ঠায় এটিতে বেশ কয়েকটি টেবিল থাকতে পারে এবং আমি কেবলমাত্র এটি দেখতে চাইলে কেবল বর্তমানে প্রদর্শিত দৃষ্টিতে উপস্থিত টেবিলটির জন্য এটি ঘটুক।

দ্রষ্টব্য: আমি এমন একটি সমাধান দেখেছি যেখানে শিরোনামগুলি স্ক্রোল না করে টেবিলের ডেটা অঞ্চল স্ক্রোলযোগ্য করে দেওয়া হয়। এটি আমি যে সমাধানটি সন্ধান করছি তা নয়।


আপনার পৃষ্ঠাটি টেবিলগুলি ব্যবহার করে ডিজাইন করা হয়েছে? টেবিলগুলির জন্য এটি প্রথমে ডিভগুলিতে রূপান্তর করা এবং টেবুলার ডেটা একা রেখে দেওয়া সম্ভব নয় কি?
লক করুন

6
আমি সম্প্রতি একটি প্লাগইন লিখেছি যা এটি করে: প্রোগ্রামিংড্রঙ্ক.ফ্লোয়েটহেড
এমকরিয়াক

1
উপরে ভোট দেওয়া সমাধান এবং নীচে এর ডেরাইভেটিভগুলি ছাড়াও, উপরে @ এমকোরিয়াকের প্লাগইনটিও বেশ ভাল। "শপিং" শেষ করার আগে এটিও একবার খেয়াল করে দেখুন।
ড্যানো

থ্যাঙ্কস ড্যান :) আমি পরবর্তী
ক্রেডিট

আমি @ এমকোরিয়াক ফ্লোটহেড প্লাগইনকে দ্বিতীয় করে দিয়েছি - আমি এটিকে দ্রুতগতিতে সংহত করতে সক্ষম হয়েছি। প্লাগইনটির জন্য অনেক ধন্যবাদ!
w5m

উত্তর:


67

পরীক্ষা করে দেখুন jQuery.floatThead ( প্রাপ্তিসাধ্য গণদেবতা ) যা খুব শান্ত, সঙ্গে কাজ করতে পারেন DataTables খুব, এবং এমনকি একটি ভিতরে কাজ করতে পারেন overflow: autoধারক।


হ্যাঁ এটি অনুভূমিক স্ক্রোলিং, উইন্ডো স্ক্রোলিং, অভ্যন্তরীণ স্ক্রোলিং এবং উইন্ডো পুনরায় আকার দেওয়ার সাথে কাজ করে।
mkoryak

আপনি কি একটি কার্যকরী কোডের সাথে একটি বেড়া যুক্ত করতে পারেন? (আমি জানি যে সাইটে আছে ...)
মিশেল আয়রেস

12
আমি একটি বিশাল ডেমো / ডক্স পৃষ্ঠা তৈরি করেছি। আপনার কেন একটি ফিজল দরকার?
mkoryak

5
আমাকে প্রশ্ন জিজ্ঞাসা করার জন্য @ মাষ্টমোডিফাই স্ট্যাকওভারফ্লো ভাল জায়গা নয়। গিথুবকে নিয়ে কোনও সমস্যার প্রতিবেদন করুন, এমনকি এটি কীভাবে কাজ করা যায় সে সম্পর্কে এটি কেবল একটি প্রশ্ন। আমি সাধারণত এক দিনের নীচে সেখানে প্রতিক্রিয়া জানাই। এখানে
অসুস্থরা

1
@ মুডমডিফাইয়ে এর মূল্য কী তা উদাহরণস্বরূপ সারণীর উপরের ক্লাসগুলির মধ্যে কোনওটিই প্রাসঙ্গিক নয়। প্লাগইনটির কাজ করার জন্য কোনও সিএসএস বা ক্লাসের দরকার নেই, যেমনটি আমার ডক্স বলেছে।
mkoryak

135

আমি jQuery ব্যবহার করে একটি প্রমাণ-ধারণা ধারণা তৈরি করেছি ।

নমুনা এখানে দেখুন।

আমি এখন একটি মার্চারিয়াল বিটবুকিট সংগ্রহস্থলটিতে এই কোডটি পেয়েছি । মূল ফাইলটি হ'ল tables.html

আমি এটির সাথে একটি সমস্যা সম্পর্কে অবগত আছি: যদি টেবিলটিতে অ্যাঙ্কর রয়েছে এবং আপনি যদি কোনও ব্রাউজারে নির্দিষ্ট অ্যাঙ্কর সহ URL টি খুলেন, পৃষ্ঠাটি লোড হয়, অ্যাঙ্কর সহ সারিটি সম্ভবত ভাসমান শিরোনাম দ্বারা অস্পষ্ট হয়ে যাবে।

আপডেট 2017-12-11: আমি দেখতে পাচ্ছি এটি বর্তমান ফায়ারফক্স (57) এবং ক্রোম (63) এর সাথে কাজ করে না। কখন এবং কেন এটি কাজ করা বন্ধ করেছিল, বা কীভাবে এটি ঠিক করা যায় তা নিশ্চিত। তবে এখন, আমি হেন্ডি ইরাওয়ানের গৃহীত উত্তরটি শ্রেষ্ঠ বলে মনে করি ।


আমি যা করছি তার জন্য আমার এটি দরকার ছিল। দুর্দান্ত সাহায্য, আপনাকে ধন্যবাদ। আমার সাথে আমি উইন্ডোটি ব্যবহার করছিলাম না কারণ স্ক্রোলিং ফলকটি এইচটিএমএলের মধ্যে একটি ডিভ ছিল। সুতরাং টেবিলে শিরোনামটি পৃষ্ঠাটি নিচে নামিয়ে দেওয়ার জন্য পৃষ্ঠায় আরও নিচে ঝাঁপিয়ে পড়েছিল এমন কোডের সাথে আমাকেও পরিবর্তন floatingHeaderRow.css("top", Math.min(scrollTop - offset.top, $(this).height() - floatingHeaderRow.height()) + "px");করতে floatingHeaderRow.css("top", scrollTop + "px");হয়েছিল।
নালুম

1
আমি আমার টেবিলে এটি বাস্তবায়নের চেষ্টা করছি। শিরোনামের প্রস্থ নিয়ে আমার একটি সমস্যা হচ্ছে। সারিগুলির ডেটা একটি ডিবি থেকে টানা মানগুলি, যেমন একটি এলোমেলো দৈর্ঘ্য। আপনি স্ক্রোল করার আগে শিরোনামগুলি তাদের স্ব-উত্তরাধিকার সূত্রে আকারে থাকে তবে একবার আপনি স্ক্রোল করলে শিরোলেখগুলির শিরোনামগুলির চারপাশে মোড়ানোর জন্য এটি শিরোনামকে আকার দেয় এবং এটি আরও অনেক ছোট প্রস্থের হয় যাতে শিরোনামগুলি তাদের নিজ নিজ শীর্ষে ট্র্যাক না করে don't কলাম। আমি কীভাবে এই সমস্যাটি সমাধান করতে পারি?
ইয়র্ক

হুম আমি নিশ্চিত না, আপনার বর্ণনার ভিত্তিতে। আমি পরামর্শ দিই 1) সম্ভব হলে অনলাইনে একটি উদাহরণ দেখান; 2) স্ট্যাকওভারফ্লোতে একটি প্রশ্ন হিসাবে এটি জিজ্ঞাসা করুন।
ক্রেগ ম্যাককুইন

@ জোন ইয়র্ক আমার ঠিক একই সমস্যা ছিল। আমার সমস্যা <টি> এর পরিবর্তে <<> শিরোনামে ব্যবহার করছিল তাই এটি প্রতিটি কলামের প্রস্থ অস্তিত্ব <<> ( // Copy cell widths from original headerকোডের অংশটি দেখুন ) এ প্রয়োগ করতে পারেনি । @ ক্রেইগ ম্যাককুইন, দয়া করে আপনার উত্তরটি সম্পাদনা করুন যাতে অন্য কেউ এ ভুল না করে।
এক্সেল

@ ক্রেইগম্যাক কিউইন যখন আমি আপনার দুর্দান্ত কোডটি ব্যবহার করি (ধন্যবাদ) তখন এটি আমার দ্বিতীয় টেবিলে ভেঙে যায় যা অন্য ট্যাবটির পিছনে রয়েছে (jQuery ট্যাব প্লাগইন)। কোন চিন্তা? অবস্থান কলামগুলি অনুসরণ না করে শিরোনামটি খুব বাম দিকে স্থাপন করা হবে। তবে প্রথম jQuery ট্যাবে টেবিলের উপর পুরোপুরি কাজ করে।
রিচার্ড Marak

68

ক্রেগ, আমি আপনার কোডটি কিছুটা পরিমার্জন করেছি (এটি এখন অবস্থানটি ব্যবহার করছে এমন কয়েকটি বিষয়গুলির মধ্যে: স্থির) এবং এটিকে একটি jQuery প্লাগইন হিসাবে মোড়ানো pped

এটি এখানে চেষ্টা করে দেখুন: http://jsfiddle.net/jmosbech/stFcx/

এবং উত্সটি এখানে পান: https://github.com/jmosbech/StickyTableHeilers


1
একটি jQuery প্লাগইন করতে ভাল ধারণা। কয়েকটি প্রশ্ন: (1) এটি অনুভূমিক স্ক্রোলিং দিয়ে ভাল কাজ করে? (২) আপনি যখন টেবিলের নীচে উইন্ডোটির উপরের অংশ থেকে স্ক্রোল করে যাচ্ছেন তখন আপনি কীভাবে এটি আচরণ করবেন? উদাহরণটি এই মামলাগুলির পরীক্ষা করার অনুমতি দেয় না।
ক্রেগ ম্যাককুইন

আপনার jsfiddle উদাহরণ টেবিলসর্টারের সাথে দুর্দান্ত কাজ করে, তবে গিথুব কোডটি কার্যকর করে না। আপনার কি টেবিলসোর্টার কোডটি সংশোধন করতে হবে?
এরিক্সলা

ক্রেগ, অনুভূমিক স্ক্রোলিং কোনও সমস্যা হওয়া উচিত নয় যেহেতু শিরোনামটি অনুভূমিকভাবে এবং উলম্বভাবে উভয় স্থানে স্ক্রোল এবং পুনরায় আকারে পুনরায় স্থাপন করা হয়। আপনার দ্বিতীয় প্রশ্নের মতো: টেবিলটি ভিউপোর্টটি ছেড়ে গেলে শিরোনামটি লুকানো থাকে।
jmosbech

এরিক, আজব। আপনি কি গিথুব থেকে /demo/tablesorter.htm খোলার চেষ্টা করেছেন? আমি টেবিলসোর্টার কোডটি সংশোধন করি নি, তবে এটির কাজ করার জন্য আপনাকে টেবিলসোর্টারের আগে স্টিকি টেবিলহাইডার প্লাগইন প্রয়োগ করতে হবে।
jmosbech

2
দিগন্তীয় স্ক্রোলিংটি বেশ কার্যকরী হয় না, টেবিলের অংশ হিসাবে সাধারণত পজিশনের চেয়ে অফ স্ক্রিন থেকে স্ক্রোল করা হলে ডায়াডটি আরও বামে অবস্থান করার পরে বেশ কিছু দূরত্বে স্ক্রোল করার পরে।
নাথান ফিলিপস

16

আপনি যদি আধুনিক সিএসএস 3 কমপ্লায়েন্ট ব্রাউজারগুলি লক্ষ্য করে থাকেন ( ব্রাউজার সমর্থন: https://caniuse.com/#feat=css-sticky ) আপনি ব্যবহার করতে পারেনposition:sticky , যার জন্য জেএস প্রয়োজন হয় না এবং টেবিলের বিন্যাসটি মিস-অ্যালাইনিংয়ের ভাঙ্গবে না এবং একই কলামের টিডি। এছাড়াও সঠিকভাবে কাজ করার জন্য স্থির কলামের প্রস্থের প্রয়োজন হয় না।

একটি একক শিরোনাম সারি উদাহরণ:

thead th
{
    position: sticky;
    top: 0px;
}

1 বা 2 টি সারি সহ আইড্যাডসের জন্য আপনি এর মতো কিছু ব্যবহার করতে পারেন:

thead > :last-child th
{
    position: sticky;
    top: 30px; /* This is for all the the "th" elements in the second row, (in this casa is the last child element into the thead) */
}

thead > :first-child th
{
    position: sticky;
    top: 0px; /* This is for all the the "th" elements in the first child row */
}

প্রথম সারির উচ্চতা (+ মার্জিন + সীমানা + প্যাডিং, যদি থাকে) এর সাথে মিলের জন্য আপনাকে পিক্সেলের সংখ্যা পরিবর্তন করতে সর্বশেষ সন্তানের শীর্ষ সম্পত্তিটি নিয়ে কিছুটা খেলতে হতে পারে , সুতরাং দ্বিতীয় সারির ঠিক নীচে লাঠি পড়ে যায় প্রথম এক বন্ধন।

একই পৃষ্ঠায় একাধিক টেবিল থাকলেও উভয় সমাধানই কাজ করে: th প্রত্যেকের উপাদান যখন সিএসএস সংজ্ঞায় নির্দেশিত হয় তখন এর শীর্ষ অবস্থানটি স্টিকি হতে শুরু করে এবং যখন সমস্ত টেবিলটি স্ক্রল হয় তখন কেবল অদৃশ্য হয়ে যায়। সুতরাং যদি আরও টেবিল থাকে তবে সমস্ত সুন্দরভাবে একইভাবে কাজ করে।

কেন গত সন্তান ব্যবহার করতে আগে এবং প্রথম সন্তানের পর CSS এ?

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

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


প্রথম উদাহরণটি ফায়ারফক্সে (61) কাজ করতে দেখা যায় না। যাইহোক, থ্যাডে অবস্থান স্টিকি সেট করা থাকলে তা হয়।
এডাহা

1
আপনি thead tr+tr thদ্বিতীয় সারি লক্ষ্য করতে পারে।
Teepeemm

5

সম্ভাব্য বিকল্প

JS-ভাসমান টেবিল-হেডার

জেএস-ভাসমান-টেবিল-শিরোনাম (গুগল কোড)

দ্রুপালে

আমার একটি ড্রুপাল 6 সাইট আছে। আমি অ্যাডমিন "মডিউল" পৃষ্ঠায় ছিলাম এবং টেবিলগুলির এই সঠিক বৈশিষ্ট্যটি লক্ষ্য করেছি!

কোডটি দেখে মনে হচ্ছে এটি কোনও ফাইল দ্বারা প্রয়োগ করা হয়েছে tableheader.js। এটি ক্লাস সহ সমস্ত টেবিলগুলিতে বৈশিষ্ট্যটি প্রয়োগ করে sticky-enabled

একটি দ্রুপাল সাইটের জন্য, আমি tableheader.jsব্যবহারকারীর সামগ্রীর জন্য সেই মডিউলটি ব্যবহার করতে সক্ষম হতে চাই । tableheader.jsদ্রুপালে ব্যবহারকারী সামগ্রী পাতায় উপস্থিত বলে মনে হচ্ছে না। ড্রুপাল থিমটি কীভাবে পাওয়া যায় তা কীভাবে পরিবর্তন করতে হয় তা জানতে আমি একটি ফোরাম বার্তা পোস্ট করেছি posted একটি প্রতিক্রিয়া অনুসারে, থিম এর হিসাবে নিম্নলিখিত হিসাবে tableheader.jsএকটি দ্রুপাল থিম যোগ করা যেতে পারে :drupal_add_js()template.php

drupal_add_js('misc/tableheader.js', 'core');

আপনার গুগল কোড লিঙ্কটি আমার জন্য খুব দরকারী ছিল, ধন্যবাদ।
ভিলিয়াস গাইদেলিস

5

আমি খুব সম্প্রতি এই সমস্যার মুখোমুখি হয়েছি। দুর্ভাগ্যক্রমে, আমাকে 2 টি টেবিল করতে হয়েছিল, একটি শিরোনামের জন্য এবং একটি শরীরের জন্য। এটি সম্ভবত সেরা পন্থা নয় তবে এখানে যায়:

<html>
<head>
    <title>oh hai</title>
</head>
<body>
    <table id="tableHeader">
        <tr>
            <th style="width:100px; background-color:#CCCCCC">col header</th>
            <th style="width:100px; background-color:#CCCCCC">col header</th>
        </tr>
    </table>
    <div style="height:50px; overflow:auto; width:250px">
        <table>
            <tr>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data1</td>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data1</td>
            </tr>
            <tr>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data2</td>
                <td style="height:50px; width:100px; background-color:#DDDDDD">data2</td>
            </tr>
        </table>
    </div>
</body>
</html>

এটি আমার পক্ষে কাজ করেছিল, এটি সম্ভবত মার্জিত উপায় নয় তবে এটি কাজ করে। আমি তদন্ত করব তাই আমি আরও ভাল কিছু করতে পারি কিনা তা দেখুন তবে এটি একাধিক টেবিলের জন্য অনুমতি দেয়।

এটি আপনার প্রয়োজনের সাথে খাপ খায় কিনা তা দেখতে ওভারফ্লো প্রপ্রেটিটি পড়ুন


হুম কাজ করছে না, আমি এটি ঠিক করার চেষ্টা করব, তবে পদ্ধতির অবশেষ রয়ে গেছে, আপনাকে ওভারফ্লো ব্যবহার করতে হবে: অটো প্রোপ্রেটি
গ্যাব রয়ের

আমি আপনার সমাধান এবং এর সরলতার প্রশংসা করি, তবে আমার প্রশ্নের মধ্যে আমি বলেছিলাম "দ্রষ্টব্য: আমি এমন একটি সমাধান দেখেছি যেখানে টেবিলের ডেটা অঞ্চলটি স্ক্রোলযোগ্য করা হয় যখন শিরোনামগুলি স্ক্রোল না করে That's এটি সমাধান নয় যা আমি খুঁজছি" "
ক্রেগ ম্যাককুইন

@ গ্যাবরোয়র আপনার উল্লেখ করা ডাব্লু 3 স্কুল পৃষ্ঠাটি বিদ্যমান নেই।
ফারহান

তারা এটিকে সরিয়ে নিয়েছে বলে মনে হচ্ছে। স্থির
গ্যাব রয়ের

এই পদ্ধতির সাথে আরেকটি সমস্যা হ'ল যদি আপনাকে কিছু কলামগুলি অন্য সামগ্রীতে অভিযোজিত করতে হয় তবে আপনার সংশ্লিষ্ট কলাম শিরোনামের সাথে তাদের প্রান্তিকতাটি ভেঙে ফেলার ঝুঁকি রয়েছে। আইএমএইচএও এই পদ্ধতির সাথে এই সমস্যার মুখোমুখি হওয়া আরও ভাল যা কলাম এবং আপেক্ষিক মাথাগুলির নিখুঁত সারিবদ্ধ রাখে এমন সামগ্রীর গতিশীল পরিচালনার অনুমতি দেয়। সুতরাং IMHO অবস্থান = স্টিকি হ'ল উপায়।
উইলি উইঙ্কা

3

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

এই সমাধানগুলির বেশিরভাগ ক্ষেত্রে আমি যে সমস্যার মুখোমুখি হয়েছিলাম তা হ'ল প্রান্তিককরণ সমস্যা। আপনি যখন শিরোনামকে ভাসমান করার চেষ্টা করবেন, কোনওভাবে শিরোনাম কোষ এবং দেহের কোষগুলির প্রান্তিককরণ ট্র্যাক হয়ে যায়।

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

সুতরাং এখন এটি অর্জনের জন্য আমাকে নিজের যুক্তিটি বাস্তবায়ন করতে হয়েছিল, যদিও আমি এটিকে নিখুঁত সমাধান হিসাবে বিবেচনা করি না তবে এটি কারও পক্ষে সহায়কও হতে পারে,

নীচে নমুনা টেবিল দেওয়া আছে।

<div class="table-holder">
        <table id="MyTable" cellpadding="4" cellspacing="0" border="1px" class="customerTable">
            <thead>
                <tr><th>ID</th><th>First Name</th><th>Last Name</th><th>DOB</th><th>Place</th></tr>
            </thead>
            <tbody>
                <tr><td>1</td><td>Customer1</td><td>LastName</td><td>1-1-1</td><td>SUN</td></tr>
                <tr><td>2</td><td>Customer2</td><td>LastName</td><td>2-2-2</td><td>Earth</td></tr>
                <tr><td>3</td><td>Customer3</td><td>LastName</td><td>3-3-3</td><td>Mars</td></tr>
                <tr><td>4</td><td>Customer4</td><td>LastName</td><td>4-4-4</td><td>Venus</td></tr>
                <tr><td>5</td><td>Customer5</td><td>LastName</td><td>5-5-5</td><td>Saturn</td></tr>
                <tr><td>6</td><td>Customer6</td><td>LastName</td><td>6-6-6</td><td>Jupitor</td></tr>
                <tr><td>7</td><td>Customer7</td><td>LastName</td><td>7-7-7</td><td>Mercury</td></tr>
                <tr><td>8</td><td>Customer8</td><td>LastName</td><td>8-8-8</td><td>Moon</td></tr>
                <tr><td>9</td><td>Customer9</td><td>LastName</td><td>9-9-9</td><td>Uranus</td></tr>
                <tr><td>10</td><td>Customer10</td><td>LastName</td><td>10-10-10</td><td>Neptune</td></tr>
            </tbody>
        </table>
    </div>

দ্রষ্টব্য : টেবিলটি একটি ডিআইভিতে মোড়কযুক্ত 'টেবিল-ধারক' এর সমান শ্রেণীর বৈশিষ্ট্য সহ।

নীচে আমি আমার এইচটিএমএল পৃষ্ঠা শিরোনামে জিকুয়ারি স্ক্রিপ্ট যুক্ত করেছি।

<script src="../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script>
<script src="../Scripts/jquery-ui.min.js" type="text/javascript"></script>
<script type="text/javascript">
    $(document).ready(function () {
        //create var for table holder
        var originalTableHolder = $(".table-holder");
        // set the table holder's with
        originalTableHolder.width($('table', originalTableHolder).width() + 17);
        // Create a clone of table holder DIV
        var clonedtableHolder = originalTableHolder.clone();

        // Calculate height of all header rows.
        var headerHeight = 0;
        $('thead', originalTableHolder).each(function (index, element) {
            headerHeight = headerHeight + $(element).height();
        });

        // Set the position of cloned table so that cloned table overlapped the original
        clonedtableHolder.css('position', 'relative');
        clonedtableHolder.css('top', headerHeight + 'px');

        // Set the height of cloned header equal to header height only so that body is not visible of cloned header
        clonedtableHolder.height(headerHeight);
        clonedtableHolder.css('overflow', 'hidden');

        // reset the ID attribute of each element in cloned table
        $('*', clonedtableHolder).each(function (index, element) {
            if ($(element).attr('id')) {
                $(element).attr('id', $(element).attr('id') + '_Cloned');
            }
        });

        originalTableHolder.css('border-bottom', '1px solid #aaa');

        // Place the cloned table holder before original one
        originalTableHolder.before(clonedtableHolder);
    });
</script>

এবং শেষে রঙিন উদ্দেশ্যে কিছুটা সিএসএস ক্লাস রয়েছে।

.table-holder
{
    height:200px;
    overflow:auto;
    border-width:0px;    
}

.customerTable thead
{
    background: #4b6c9e;        
    color:White;
}

সুতরাং এই যুক্তির পুরো ধারণাটি হ'ল টেবিলটিকে একটি সারণী ধারক ডিভের মধ্যে স্থাপন করা এবং পৃষ্ঠাটি লোড হওয়ার পরে ক্লায়েন্টের পাশে সেই ধারকের ক্লোন তৈরি করা। এখন ক্লোন হোল্ডারের অভ্যন্তরে টেবিলের মূল অংশটি আড়াল করুন এবং অবশিষ্ট শিরোনাম অংশটি মূল শিরোলেখের উপরে রাখুন।

একই দ্রবণটি এএসপির জন্যও কাজ করে: গ্রিডভিউ, গ্রিডভিউতে এটি অর্জনের জন্য আপনাকে আরও দুটি পদক্ষেপ যুক্ত করতে হবে,

  1. আপনার ওয়েব পৃষ্ঠায় গ্রিডভিউ অবজেক্টের অনপ্রেেন্ডার ইভেন্টে, শিরোনাম সারিটির টেবিল বিভাগটি টেবিলহিডারের সমান করুন।

    if (this.HeaderRow != null)
    {
        this.HeaderRow.TableSection = TableRowSection.TableHeader;
    }
  2. এবং আপনার গ্রিড মোড়ানো <div class="table-holder"></div>

দ্রষ্টব্য : যদি আপনার শিরোনামটিতে ক্লিকযোগ্য নিয়ন্ত্রণ থাকে তবে ক্লোনড শিরোনামে উত্থিত ইভেন্টগুলি মূল শিরোলেখগুলিতে পাস করার জন্য আপনাকে আরও কিছু jQuery স্ক্রিপ্ট যুক্ত করতে হতে পারে। এই কোডটি jmosbech দ্বারা তৈরি jQuery স্টিকি-হেডার প্লাগইনে ইতিমধ্যে উপলব্ধ


ভাল চেষ্টা করার জন্য +1, তবে প্রচুর ডেটা সহ বড় টেবিলগুলির জন্য, পুরো জিনিসটি ক্লোন করা বেশ খারাপ ... আমি ভাবছি যে লোডিংয়ের সময় দ্বিগুণ হবে
খভেরিম

2

বিভাগে ব্যবহার display: fixedকরে theadকাজ করা উচিত, তবে এটি কেবলমাত্র বর্তমান টেবিলে কাজ করে কাজ করার জন্য আপনার জাভাস্ক্রিপ্টের সহায়তা প্রয়োজন। এবং এটি জটিল হবে কারণ ভিউপোর্টের সাথে সম্পর্কিত উপাদানগুলির স্ক্রোলিং জায়গা এবং অবস্থান নির্ধারণ করা দরকার যা ব্রাউজারের অসঙ্গতিগুলির অন্যতম প্রধান ক্ষেত্র।

জনপ্রিয় জাভাস্ক্রিপ্ট ফ্রেমওয়ার্কগুলিতে (jQuery, MooTools, YUI, ইত্যাদি) দেখুন আপনারা যা করতে চান তা করতে পারেন বা আপনি যা চান তা আরও সহজ করে তুলতে পারে কিনা তা দেখুন।


1
পরামর্শের জন্য ধন্যবাদ. আমি jQuery ব্যবহার করে একটি সমাধান করেছি my আমার উত্তর দেখুন।
ক্রেগ ম্যাককুইন

আমি এটি চেষ্টা করেছিলাম এবং ভাবছি আপনি প্রদর্শনের চেয়ে পজিশনটি বোঝাচ্ছেন, তবে ছোমে থ্যাডের পক্ষে কোনও কাজ করেন নি।
এরিকসলা

@ericslaw স্বীকারোক্তি - হ্যাঁ আমি বোঝানো position: fixed। দুঃখিত, এটি ক্রোমে কাজ করেনি।
স্ট্যাটিক্সান

প্রস্থের শৈলীর উপেক্ষা করে আমার
শিরোনামকে গোলযোগ করেছে

2

আপনি যদি একটি পূর্ণ স্ক্রিন সারণী ব্যবহার করেন তবে আপনি সম্ভবত প্রদর্শিত হতে সেট করতে আগ্রহী: স্থির; এবং শীর্ষ: 0; অথবা CSS এর মাধ্যমে খুব অনুরূপ পদ্ধতির চেষ্টা করুন।

হালনাগাদ

ইফ্রেমেস (এইচটিএমএল ৪.০) দিয়ে খুব দ্রুত একটি ওয়ার্কিং সলিউশন তৈরি করুন। এই উদাহরণটি মান অনুসারে নয়, তবে আপনি সহজেই এটিকে ঠিক করতে সক্ষম হবেন:

outer.html

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">     
    <head>      
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   
        <title>Outer</title>
  <body>
    <iframe src="test.html" width="200" height="100"></iframe>
    </body>
</html> 

test.html

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">     
    <head>      
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   
        <title>Floating</title>
    <style type="text/css">
      .content{
        position:relative; 
      }

      thead{
        background-color:red;
        position:fixed; 
        top:0;
      }
    </style>
  <body>
    <div class="content">      
      <table>
        <thead>
          <tr class="top"><td>Title</td></tr>
        </head>
        <tbody>
          <tr><td>a</td></tr>
          <tr><td>b</td></tr>
          <tr><td>c</td></tr>
          <tr><td>d</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
          <tr><td>e</td></tr>
        </tbody>
      </table>
    </div>
    </body>
</html> 

@ a_m0d, সত্য ... তবে অনুরোধটি একটি বিভ্রান্তিকর শোনায়। হয় আমরা এটির ভুল বোঝাবুঝি করছি, অথবা জিজ্ঞাসাবাদী তিনি কী চান তা পুরোপুরি বুঝতে পারে না।
সাম্পসন

কিছু জাভাস্ক্রিপ্ট ব্যবহার করে এখানে আরও একটি সমাধান দেওয়া হয়েছে ইমপুটজেড
সিএসএসএফ

2

কেবল সিএসএস ব্যবহার করে সবচেয়ে সহজ উত্তর: ডি !!!

table {
  /* Not required only for visualizing */
  border-collapse: collapse;
  width: 100%;
}

table thead tr th {
  /* you could also change td instead th depending your html code */
  background-color: green;
  position: sticky;
  z-index: 100;
  top: 0;
}

td {
  /* Not required only for visualizing */
  padding: 1em;
}
<table>
  <thead>
    <tr>
      <th>Col1</th>
      <th>Col2</th>
      <th>Col3</th>
    </tr>
  </thead>
  <tbody>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>data</td>
       <td>data</td>
       <td>data</td>
     </tr>
     <tr>
       <td>david</td>
       <td>castro</td>
       <td>rocks!</td>
     </tr>
  </tbody>
</table>


1
ধন্যবাদ ডেভিড, আমি এই প্রশ্নের মধ্যে এটি খুঁজে পেয়েছি সবচেয়ে ভাল পদ্ধতির
টমাসজ স্মাইকোস্কি

0

যে ধারণার প্রমাণ আপনার তৈরি করা ছিল দারুণ! তবে আমি এই jQuery প্লাগইনটি পেয়েছি যা মনে হয় খুব ভাল কাজ করছে। আশা করি এটা সাহায্য করবে!


এটি দেখে মনে হচ্ছে এটি কোনও আলাদা বৈশিষ্ট্য প্রয়োগ করে । যেমনটি আমি আমার মূল প্রশ্নে বলেছিলাম: "দ্রষ্টব্য: আমি এমন একটি সমাধান দেখেছি যেখানে টেবিলের ডেটা অঞ্চলটি স্ক্রোলযোগ্য করে তৈরি করা হয়েছে যখন শিরোনামগুলি স্ক্রোল করে না That's এটি সমাধান নয় যা আমি সন্ধান করছি" "
ক্রেগ ম্যাককুইন

2
আপনি উল্লিখিত প্লাগইনটি সবেমাত্র আমার টেবিল শিরোনামকে গোলমাল করেছেন। এটি ব্যবহার করতে সক্ষম ছিল না।
পাভেল_কাজলৌ

0

হতাশাজনক যে এক ব্রাউজারে যা দুর্দান্ত কাজ করে তা অন্যের মধ্যে কাজ করে না। নিম্নলিখিতগুলি ফায়ারফক্সে কাজ করে তবে ক্রোম বা আইই তে নয়:

<table width="80%">

 <thead>

 <tr>
  <th>Column 1</th>
  <th>Column 2</th>
  <th>Column 3</th>
 </tr>

 </thead>

 <tbody style="height:50px; overflow:auto">

  <tr>
    <td>Cell A1</td>
    <td>Cell B1</td>
    <td>Cell C1</td>
  </tr>

  <tr>
    <td>Cell A2</td>
    <td>Cell B2</td>
    <td>Cell C2</td>
  </tr>

  <tr>
    <td>Cell A3</td>
    <td>Cell B3</td>
    <td>Cell C3</td>
  </tr>

 </tbody>

</table>

4
আমি এটি ফায়ারফক্স 8.0 এ চেষ্টা করে দেখছি এবং এটি কিছুই করার জন্য মনে হচ্ছে না। এটার কাজ কি?
ক্রেগ ম্যাকউউইন

কী px? এটি কি সেই 90 বছর বয়সী লোকেরা যখন ডিসপ্লে ডিভাইসটিতে 72 ডিপিআই ব্যবহার করার জন্য ব্যবহৃত হয়েছিল সেই উত্তরাধিকারের ইউনিট?
সিলিং

আমি সম্মত হই: এটি অত্যন্ত হতাশার, দুর্ভাগ্যক্রমে ব্রাউজার বিকাশকারীরা প্রতিটি পরিস্থিতিতে মানকে সম্মান করে না ... এবং কয়েক বছর আগে আরও খারাপ ছিল! এখন কিছু সমস্যা সমাধান হয়েছে এবং আরও ব্রাউজারগুলি আরও মানসম্মত পদ্ধতিতে আচরণ করে, তবে এখনও অনেকগুলি পদক্ষেপ এখনও করতে হবে: আসুন আশা করি এবং প্রার্থনা করুন :-)
উইলি উইনকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.