2012-06-06 17 views
6

क्या सामग्री के आधार पर HTML तालिका ऊंचाई को स्वत: व्यवस्थित करने का कोई तरीका है? इसके अलावा यदि यह कई पंक्तियों के साथ पड़ोसी सेल के बगल में एक सेल (या कोशिकाएं) है।पंक्तियों में शामिल होने पर सामग्री के आधार पर HTML तालिका सेल ऊंचाई को स्वचालित करें

उदा। अगर मैं इस तरह एक मेज है (दाईं ओर सेल है rowspan = "2" और सेल सामग्री = 150px की बाईं ऊंचाई पर सेल सामग्री = 600px, प्रत्येक कोशिका में की ऊंचाई):

Cells evenly spaces

बाईं ओर 2 सेल सहमति के बीच एक अंतर है क्योंकि कोशिकाओं ने स्वयं अपनी ऊंचाई को स्वतः बढ़ाया है। मैं इसे इस तरह देखने के लिए करना चाहते हैं:

Cell height adjusted to content

कहाँ शीर्ष कोशिकाओं स्वचालित रूप से पतन सामग्री ऊंचाई सेल। क्या इसे प्राप्त करने का कोई तरीका है?

+0

क्या आप jquery (या कोई अन्य जावास्क्रिप्ट ढांचा) या केवल जावास्क्रिप्ट का उपयोग कर रहे हैं? –

+0

सादा जेएस। लेकिन मुझे नहीं लगता कि प्रत्यक्ष ऊंचाई असाइनमेंट इस परिदृश्य में सेल का आकार बदल देगा –

+0

प्रत्यक्ष सेल संरेखण करेगा, लेकिन समस्या यह है कि, यदि आप जानते हैं कि कोड कितना सेल होगा (कोड लिखने के लिए) या कक्ष गतिशील रूप से बनाए जाते हैं। –

उत्तर

2

यह सही ऊंचाई पर कोशिकाओं की अंतिम पंक्ति सेट करता है (demo):

function grow(td) { 
    var table, target, high, low, mid; 

    td = $(td); 
    table = td.closest('table'); 
    target = table.height(); 
    low = td.height(); 

    // find initial high 
    high = low; 
    while (table.height() <= target) { 
     td.height(high *= 2); 
    } 

    // binary search! 
    while (low + 1 < high) { 
     mid = low + Math.floor((high - low)/2); 
     td.height(mid); 
     if (table.height() > target) { 
      high = mid; 
     } else { 
      low = mid; 
     } 
    } 

    td.height(low); 
} 

$('tr:last-child td').each(function() { grow(this); }); 

इसे सादे जावास्क्रिप्ट में परिवर्तित करने के लिए यह छोटा होना चाहिए।


अद्यतन: अधिक जटिल तालिकाओं के लिए, आप इस के साथ अंतिम पंक्ति (demo) से बदलना चाहेंगे:

$.each($('td').get().reverse(), function() { grow(this); }); 

विचार हर कोशिका पर grow() कॉल करने के लिए है, आखिरी पंक्ति से शुरू और ऊपर काम कर रहा है।

+0

एक साथ बंद होना चाहिए, धन्यवाद, धन्यवाद! जब मैं अपने देव लैपटॉप –

+0

पर जाता हूं तो इसका परीक्षण करूंगा अभी भी इसे सादे वेनिला जेएस में ले जाने के साथ प्रयोग कर रहा हूं। यदि टेबल लेआउट थोड़ा अधिक जटिल है तो यह काम करेगा? इसमें हमेशा 2 कॉलम होंगे, लेकिन कुछ कोशिकाएं दोनों स्तंभों को फैला सकती हैं, न कि एक से अधिक कोशिकाएं एकाधिक पंक्तियों का विस्तार कर सकती हैं। –

+0

@Trekstuff कृपया मेरा अपडेट देखें। –

1

पर विचार तालिका आईडी = "mytable" यह होगा:

$("#mytable").find("td").each(function(){ 

    var ContentHeight = $($(this).html()).height(); 
    $(this).height(ContentHeight); 

}); 
+0

त्वरित प्रतिक्रिया के लिए धन्यवाद। हम jQuery का उपयोग नहीं करते हैं; मैं सादा वेनिला जावास्क्रिप्ट में भी ऐसा ही कर सकता था, लेकिन मुझे नहीं लगता कि सेल को ऊंचाई मान असाइन करना इस परिदृश्य में काम करेगा। या मैं गलत हूँ? –

+0

हाय, क्या आपको किसी भी मौके पर इस मुद्दे पर कोई अपडेट है? मैं अटक गया हूं :( –

0

अपने पृष्ठ के अंत में एक जावास्क्रिप्ट कोड बना सकते हैं और यह आपके लिए इसे करते हैं:

<script type="text/javascript"> 
document.getElementById("idOfTd").style.height="100px"; 
</script> 
+0

यह काम करना चाहिए –

+0

क्या आपने इसे आजमाया है? क्या यह वास्तव में आईई या फ़ायरफ़ॉक्स में शीर्ष बाएं सेल की ऊंचाई को कम करता है? –

+0

हाँ jquery से पहले मैं इस विधि का उपयोग कर रहा था –

0

मुझे लगता है कि यह बेहतर http://jsfiddle.net/miqdad/w9QYB/

+0

http://jsfiddle.net/miqdad/w9QYB/1/ –

+0

हां , मैं टेबल-इन-टेबल समाधान में आया हूं, लेकिन वर्तमान में तालिका लेआउट सर्वर-साइड कोड द्वारा उत्पन्न होता है और इसे बदलने में थोड़ा प्रयास नहीं होता है। मुझे क्लाइंट-साइड समाधान ढूंढना होगा जो मौजूदा लेआउट के साथ काम करता है। –

+0

क्या आप ब्राउजर व्यू स्रोत –

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