2008-11-17 6 views
29

एक्सेल में, जब आप 'फ्रीज पैन' सक्रिय करते हैं, तो मैं अपनी पहली पंक्ति और पहला स्तंभ दोनों लॉक कैसे बना सकता हूं? मुझे दोनों क्षैतिज और लंबवत स्क्रॉल करने के लिए तालिका की आवश्यकता है (इस के लिए बहुत सारे समाधान मौजूद हैं, लेकिन केवल लंबवत स्क्रॉलिंग की अनुमति दें)।स्क्रॉल करते समय संभवतः जावास्क्रिप्ट और सीएसएस का उपयोग करते समय पहली पंक्ति और तालिका के पहले कॉलम को कैसे लॉक कर सकता हूं?

तो, जब आप तालिका में स्क्रॉल करते हैं, तो पहली पंक्ति रखी जाएगी, क्योंकि इसमें कॉलम शीर्षलेख होंगे। यह thead में हो सकता है, या ऐसा नहीं हो सकता है, जो समाधान को आसान बनाता है।

जब आप सही स्क्रॉल करते हैं, तो पहला कॉलम रहता है, क्योंकि इसमें पंक्तियों के लिए लेबल होते हैं।

मुझे यकीन है कि यह अकेले सीएसएस के साथ असंभव है, लेकिन क्या कोई मुझे जावास्क्रिप्ट समाधान की ओर इंगित कर सकता है? इसे सभी प्रमुख ब्राउज़रों में काम करने की ज़रूरत है।

+0

हाय, मुझे पता है कि यह थोड़ा पुराना है, लेकिन क्या आपको इसके लिए एक समाधान समाधान मिला? सही के रूप में चिह्नित उत्तर अब टूटी हुई लिंक है। मैं यहां वही चीज़ ढूंढने की कोशिश कर रहा हूं: http: // stackoverflow।कॉम/प्रश्न/743663/कैसे-करें-i-freeze-the-first-and-last-column-of-html-table-in-a-scrollable-div – Damovisa

+0

मैंने अभी स्वीकृत उत्तर में लिंक की कोशिश की है, और उन्होंने मेरे लिए काम किया। क्या आपको अभी भी परेशानी है? – pkaeding

उत्तर

0

overflow: scroll; के साथ, अपने स्वयं के div के अंदर तालिका का वास्तविक "डेटा" डालकर एक समाधान के बारे में कैसे? फिर ब्राउज़र स्वचालित रूप से "टेबल" के हिस्से के लिए स्क्रॉलबार बनाएगा जिसे आप लॉक नहीं करना चाहते हैं, और आप "टेबल हेडर"/पहली पंक्ति को उस <div> से ऊपर रख सकते हैं।

यह सुनिश्चित नहीं है कि यह क्षैतिज स्क्रॉलिंग के साथ कैसे काम करेगा।

+0

हाँ, यह लंबवत स्क्रॉलिंग के लिए काम करता है, लेकिन क्षैतिज स्क्रॉलिंग के लिए नहीं। सवाल में मैंने जो सामान्य समाधान बताया है। – pkaeding

0

Sort and Lock Table एकमात्र समाधान है जिसे मैंने देखा है जो आईई की तुलना में अन्य ब्राउज़रों पर काम करता है। (हालांकि यह "locked column css" चाल भी कर सकता है)। नीचे आवश्यक कोड ब्लॉक।

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
    <meta name="robots" content="noindex, nofollow"> 
    <meta name="googlebot" content="noindex, nofollow"> 
    <script type="text/javascript" src="/js/lib/dummy.js"></script> 
    <link rel="stylesheet" type="text/css" href="/css/result-light.css"> 
    <style type="text/css"> 
    /* Scrollable Content Height */ 
.scrollContent { 
height:100px; 
overflow-x:hidden; 
overflow-y:auto; 
} 
.scrollContent tr { 
height: auto; 
white-space: nowrap; 
} 

/* Prevent Mozilla scrollbar from hiding right-most cell content */ 
.scrollContent tr td:last-child { 
padding-right: 20px; 
} 

/* Fixed Header Height */ 
.fixedHeader tr { 
position: relative; 
height: auto; 
} 

/* Put border around entire table */ 
div.TableContainer { 
border: 1px solid #7DA87D; 
} 

/* Table Header formatting */ 
.headerFormat { 
background-color: white; 
color: #FFFFFF; 
margin: 3px; 
padding: 1px; 
white-space: nowrap; 
font-family: Helvetica; 
font-size: 16px; 
text-decoration: none; 
font-weight: bold; 
} 
.headerFormat tr td { 
border: 1px solid #000000; 
background-color: #7DA87D; 
} 

/* Table Body (Scrollable Content) formatting */ 
.bodyFormat tr td { 
    color: #000000; 
    margin: 3px; 
    padding: 1px; 
    border: 0px none; 
    font-family: Helvetica; 
    font-size: 12px; 
} 

/* Use to set different color for alternating rows */ 
.alternateRow { 
    background-color: #E0F1E0; 
} 

/* Styles used for SORTING */ 
.point { 
cursor:pointer; 
} 
td.sortedColumn { 
    background-color: #E0F1E0; 
} 

tr.alternateRow td.sortedColumn { 
    background-color: #c5e5c5; 
} 
.total { 
    background-color: #FED362; 
    color: #000000; 
    white-space: nowrap; 
    font-size: 12px; 
    text-decoration: none; 
} 
    </style> 

    <title></title> 
<script type='text/javascript'>//<![CDATA[ 

/* This script and many more are available free online at 
The JavaScript Source :: http://www.javascriptsource.com 
Created by: Stan Slaughter :: http://www.stansight.com/ */ 

/* ====================================================== 
Generic Table Sort 

Basic Concept: A table can be sorted by clicking on the title of any 
column in the table, toggling between ascending and descending sorts. 


Assumptions: 

* The first row of the table contains column titles that are "clicked" 
    to sort the table 

* The images 'desc.gif','asc.gif','none.gif','sorting.gif' exist 

* The img tag is in each column of the the title row to represent the 
    sort graphic. 

* The CSS classes 'alternateRow' and 'sortedColumn' exist so we can 
    have alternating colors for each row and a highlight the sorted 
    column. Something like the <style> definition below, but with the 
    background colors set to whatever you want. 

    <style> 
    tr.alternateRow { 
    background-color: #E0F1E0; 
    } 

    td.sortedColumn { 
    background-color: #E0F1E0; 
    } 

    tr.alternateRow td.sortedColumn { 
    background-color: #c5e5c5; 
    } 
    </style> 

====================================================== */ 

function sortTable(td_element,ignoreLastLines) { 

    // If the optional ignoreLastLines parameter (number of lines *not* to sort at end of table) 
    // was not passed then make it 0 
    ignoreLastLines = (typeof(ignoreLastLines)=='undefined') ? 0 : ignoreLastLines; 

    var sortImages =['data:image/gif;base64,R0lGODlhCgAKAMQXAJOkk3mReXume3uTe3mieXGPcXOYc/Hx8Xadds/Wz9vg24ejh3GUcYOgg6a0pnGVcfP18+3w7c3TzdPY06u4q/r8+v///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABcALAAAAAAKAAoAAAUz4IVcZDleixQIQjA1pFFZx2FVRklZvOWUl8LsVgBeFLyE8TLgDZYESISwvAAA1QvjAQwBADs=','data:image/gif;base64,R0lGODlhCgAKAMQXAJOkk3mReXume3uTe3mieXGPcXOYc/Hx8Xadds/Wz9vg24ejh3GUcYOgg6a0pnGVcfP18+3w7c3TzdPY06u4q/r8+v///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAABcALAAAAAAKAAoAAAUw4CVeDzOeFwCgIhFBBDtY1sAmtIIWFV0VJweNRhkZeoeDpWIQNSYBgSAgWYgQLGwIADs=','data:image/gif;base64,R0lGODlhCgAKALMLAHaRdnCTcHegd7C8sNTa1Ku4q9vg24GXgfr8+uDl4P///////wAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAKAAoAAAQfcMlJq12hIHKoSEqIdBIQnslknkoqfedIBQNikFduRQA7','http://web.archive.org/web/20150906203819im_/http://www.javascriptsource.com/miscellaneous/sorting.gif']; 

    // Get the image used in the first row of the current column 
    var sortColImage = td_element.getElementsByTagName('img')[0]; 

    // If current image is 'asc.gif' or 'none.gif' (elements 1 and 2 of sortImages array) then this will 
    // be a descending sort else it will be ascending - get new sort image icon and set sort order flag 
    var sortAscending = false; 
    var newSortColImage = ""; 
    if (sortColImage.getAttribute('src').indexOf(sortImages[1])>-1 || 
    sortColImage.getAttribute('src').indexOf(sortImages[2])>-1) { 
    newSortColImage = sortImages[0]; 
    sortAscending = false; 
    } else { 
    newSortColImage = sortImages[1]; 
    sortAscending = true; 
    } 

    // Assign "SORTING" image icon (element 3 of sortImages array)) to current column title 
    // (will replace with newSortColImage when sort completes) 
    sortColImage.setAttribute('src',sortImages[3]); 

    // Find which column was clicked by getting it's column position 
    var indexCol = td_element.cellIndex; 

    // Get the table element from the td element that was passed as a parameter to this function 
    var table_element = td_element.parentNode; 
    while (table_element.nodeName != "TABLE") { 
    table_element = table_element.parentNode; 
    } 

    // Get all "tr" elements from the table and assign then to the Array "tr_elements" 
    var tr_elements = table_element.getElementsByTagName('tr'); 

    // Get all the images used in the first row then set them to 'none.gif' 
    // (element 2 or sortImages array) except for the current column (all ready been changed) 
    var allImg = tr_elements[0].getElementsByTagName('img'); 
    for(var i=0;i<allImg.length;i++){ 
    if(allImg[i]!=sortColImage){allImg[i].setAttribute('src',sortImages[2])} 
    } 

    // Some explantion of the basic concept of the following code before we 
    // actually start. Essentially we are going to copy the current columns information 
    // into an array to be sorted. We'll sort the column array then go back and use the information 
    // we saved about the original row positions to re-order the entire table. 
    // We are never really sorting more than a columns worth of data, which should keep the sorting fast. 

    // Create a new array for holding row information 
    var clonedRows = new Array() 

    // Create a new array to store just the selected column values, not the whole row 
    var originalCol = new Array(); 

    // Now loop through all the data row elements 
    // NOTE: Starting at row 1 because row 0 contains the column titles 
    for (var i=1; i<tr_elements.length - ignoreLastLines; i++) { 

    // "Clone" the tr element i.e. save a copy all of its attributes and values 
    clonedRows[i]=tr_elements[i].cloneNode(true); 

    // Text value of the selected column on this row 
    var valueCol = getTextValue(tr_elements[i].cells[indexCol]); 

    // Format text value for sorting depending on its type, ie Date, Currency, number, etc.. 
    valueCol = FormatForType(valueCol); 

    // Assign the column value AND the row number it was originally on in the table 
    originalCol[i]=[valueCol,tr_elements[i].rowIndex]; 
    } 

    // Get rid of element "0" from this array. A value was never assigned to it because the first row 
    // in the table just contained the column titles, which we did not bother to assign. 
    originalCol.shift(); 

    // Sort the column array returning the value of a sort into a new array 
    sortCol = originalCol.sort(sortCompare); 

    // If it was supposed to be an Ascending sort then reverse the order 
    if (sortAscending) { sortCol.reverse(); } 

    // Now take the values from the sorted column array and use that information to re-arrange 
    // the order of the tr_elements in the table 
    for (var i=1; i < tr_elements.length - ignoreLastLines; i++) { 

    var old_row = sortCol[i-1][1]; 
    var new_row = i; 
    tr_elements[i].parentNode.replaceChild(clonedRows[old_row],tr_elements[new_row]); 
    } 

    // Format the table, making the rows alternating colors and highlight the sorted column 
    makePretty(table_element,indexCol,ignoreLastLines); 

    // Assign correct sort image icon to current column title 
    sortColImage.setAttribute('src',newSortColImage); 
} 

// Function used by the sort routine to compare the current value in the array with the next one 
function sortCompare (currValue, nextValue) { 
// Since the elements of this array are actually arrays themselves, just sort 
// on the first element which contiains the value, not the second which contains 
// the original row position 
    if (currValue[0] == nextValue[0]) return 0; 
    if (currValue[0] < nextValue[0]) return -1; 
    if (currValue[0] > nextValue[0]) return 1; 
} 

//----------------------------------------------------------------------------- 
// Functions to get and compare values during a sort. 
//----------------------------------------------------------------------------- 

// This code is necessary for browsers that don't reflect the DOM constants 
// (like IE). 
if (document.ELEMENT_NODE == null) { 
    document.ELEMENT_NODE = 1; 
    document.TEXT_NODE = 3; 
} 

function getTextValue(el) { 
    var i; 
    var s; 
    // Find and concatenate the values of all text nodes contained within the 
    // element. 
    s = ""; 
    for (i = 0; i < el.childNodes.length; i++) 
    if (el.childNodes[i].nodeType == document.TEXT_NODE) 
     s += el.childNodes[i].nodeValue; 
    else if (el.childNodes[i].nodeType == document.ELEMENT_NODE && 
      el.childNodes[i].tagName == "BR") 
     s += " "; 
    else 
     // Use recursion to get text within sub-elements. 
     s += getTextValue(el.childNodes[i]); 

    return normalizeString(s); 
} 

// Regular expressions for normalizing white space. 
var whtSpEnds = new RegExp("^\\s*|\\s*$", "g"); 
var whtSpMult = new RegExp("\\s\\s+", "g"); 

function normalizeString(s) { 
    s = s.replace(whtSpMult, " "); // Collapse any multiple whites space. 
    s = s.replace(whtSpEnds, ""); // Remove leading or trailing white space. 
    return s; 
} 

// Function used to modify values to make then sortable depending on the type of information 
function FormatForType(itm) { 
    var sortValue = itm.toLowerCase(); 

    // If the item matches a date pattern (MM/DD/YYYY or MM/DD/YY or M/DD/YYYY) 
    if (itm.match(/^\d\d[\/-]\d\d[\/-]\d\d\d\d$/) || 
     itm.match(/^\d\d[\/-]\d\d[\/-]\d\d$/) || 
     itm.match(/^\d[\/-]\d\d[\/-]\d\d\d\d$/)) { 

    // Convert date to YYYYMMDD format for sort comparison purposes 
    // y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX 
    var yr = -1; 

    if (itm.length == 10) { 
     sortValue = itm.substr(6,4)+itm.substr(0,2)+itm.substr(3,2); 
    } else if (itm.length == 9) { 
     sortValue = itm.substr(5,4)+"0" + itm.substr(0,1)+itm.substr(2,2); 
    } else { 
     yr = itm.substr(6,2); 
     if (parseInt(yr) < 50) { 
     yr = '20'+yr; 
     } else { 
     yr = '19'+yr; 
     } 
     sortValue = yr+itm.substr(3,2)+itm.substr(0,2); 
    } 

    } 



    // If the item matches a Percent patten (contains a percent sign) 
    if (itm.match(/%/)) { 
    // Replace anything that is not part of a number (decimal pt, neg sign, or 0 through 9) with an empty string. 
    sortValue = itm.replace(/[^0-9.-]/g,''); 
    sortValue = parseFloat(sortValue); 
    } 

    // If item starts with a "(" and ends with a ")" then remove them and put a negative sign in front 
    if (itm.substr(0,1) == "(" & itm.substr(itm.length - 1,1) == ")") { 
    itm = "-" + itm.substr(1,itm.length - 2); 
    } 

// If the item matches a currency pattern (starts with a dollar or negative dollar sign) 
    if (itm.match(/^[£$]|(^-)/)) { 
    // Replace anything that is not part of a number (decimal pt, neg sign, or 0 through 9) with an empty string. 
    sortValue = itm.replace(/[^0-9.-]/g,''); 
    if (isNaN(sortValue)) { 
    sortValue = 0; 
    } else { 
    sortValue = parseFloat(sortValue); 
    } 
} 

    // If the item matches a numeric pattern 
    if (itm.match(/(\d*,\d*$)|(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/)) { 
    // Replace anything that is not part of a number (decimal pt, neg sign, or 0 through 9) with an empty string. 
    sortValue = itm.replace(/[^0-9.-]/g,''); 
// sortValue = sortValue.replace(/,/g,''); 
    if (isNaN(sortValue)) { 
    sortValue = 0; 
    } else { 
    sortValue = parseFloat(sortValue); 
    } 
    } 

    return sortValue; 
} 

//----------------------------------------------------------------------------- 
// Functions to update the table appearance after a sort. 
//----------------------------------------------------------------------------- 

// Style class names. 
var rowClsNm = "alternateRow"; 
var colClsNm = "sortedColumn"; 

// Regular expressions for setting class names. 
var rowTest = new RegExp(rowClsNm, "gi"); 
var colTest = new RegExp(colClsNm, "gi"); 

function makePretty(tblEl, col, ignoreLastLines) { 

    var i, j; 
    var rowEl, cellEl; 

    // Set style classes on each row to alternate their appearance. 
    for (i = 1; i < tblEl.rows.length - ignoreLastLines; i++) { 
    rowEl = tblEl.rows[i]; 
    rowEl.className = rowEl.className.replace(rowTest, ""); 
    if (i % 2 != 0) 
     rowEl.className += " " + rowClsNm; 
    rowEl.className = normalizeString(rowEl.className); 
    // Set style classes on each column (other than the name column) to 
    // highlight the one that was sorted. 
    for (j = 0; j < tblEl.rows[i].cells.length; j++) { 
     cellEl = rowEl.cells[j]; 
     cellEl.className = cellEl.className.replace(colTest, ""); 
     if (j == col) 
     cellEl.className += " " + colClsNm; 
     cellEl.className = normalizeString(cellEl.className); 
    } 
    } 


} 

// END Generic Table sort. 

// ================================================= 

// Function to scroll to top before sorting to fix an IE bug 
// Which repositions the header off the top of the screen 
// if you try to sort while scrolled to bottom. 
function GoTop() { 
document.getElementById('TableContainer').scrollTop = 0; 
} 

//]]> 
</script> 
</head> 
<body> 
    <table cellpadding="0" cellspacing="0" border="0"> 
<tr><td> 
<div id="TableContainer" class="TableContainer" style="height:230px;"> 
<table class="scrollTable"> 
<thead class="fixedHeader headerFormat"> 
    <tr> 
    <td class="point" onclick="GoTop(); sortTable(this,1);" title="Sort"><b>NAME</b> <img src="data:image/gif;base64,R0lGODlhCgAKALMLAHaRdnCTcHegd7C8sNTa1Ku4q9vg24GXgfr8+uDl4P///////wAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAKAAoAAAQfcMlJq12hIHKoSEqIdBIQnslknkoqfedIBQNikFduRQA7" border="0"></td> 
    <td class="point" onclick="GoTop(); sortTable(this,1);" title="Sort" align="right"><b>Amt</b> <img src="data:image/gif;base64,R0lGODlhCgAKALMLAHaRdnCTcHegd7C8sNTa1Ku4q9vg24GXgfr8+uDl4P///////wAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAKAAoAAAQfcMlJq12hIHKoSEqIdBIQnslknkoqfedIBQNikFduRQA7" border="0"></td> 
    <td class="point" onclick="GoTop(); sortTable(this,1);" title="Sort" align="right"><b>Lvl</b> <img src="data:image/gif;base64,R0lGODlhCgAKALMLAHaRdnCTcHegd7C8sNTa1Ku4q9vg24GXgfr8+uDl4P///////wAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAKAAoAAAQfcMlJq12hIHKoSEqIdBIQnslknkoqfedIBQNikFduRQA7" border="0"></td> 
    <td class="point" onclick="GoTop(); sortTable(this,1);" title="Sort" align="right"><b>Rank</b> <img src="data:image/gif;base64,R0lGODlhCgAKALMLAHaRdnCTcHegd7C8sNTa1Ku4q9vg24GXgfr8+uDl4P///////wAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAKAAoAAAQfcMlJq12hIHKoSEqIdBIQnslknkoqfedIBQNikFduRQA7" border="0"></td> 
    <td class="point" onclick="GoTop(); sortTable(this,1);" title="Sort" align="right"><b>Position</b> <img src="data:image/gif;base64,R0lGODlhCgAKALMLAHaRdnCTcHegd7C8sNTa1Ku4q9vg24GXgfr8+uDl4P///////wAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAKAAoAAAQfcMlJq12hIHKoSEqIdBIQnslknkoqfedIBQNikFduRQA7" border="0"></td> 
    <td class="point" onclick="GoTop(); sortTable(this,1);" title="Sort" align="right"><b>Date</b> <img src="data:image/gif;base64,R0lGODlhCgAKALMLAHaRdnCTcHegd7C8sNTa1Ku4q9vg24GXgfr8+uDl4P///////wAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAKAAoAAAQfcMlJq12hIHKoSEqIdBIQnslknkoqfedIBQNikFduRQA7" border="0"></td> 
    </tr> 
</thead> 
<tbody class="scrollContent bodyFormat" style="height:200px;"> 
    <tr class="alternateRow"> 
    <td>Maha</td> 
    <td align="right">$19,923.19</td> 
    <td align="right">100</td> 
    <td align="right">100</td> 
    <td>Owner</td> 
    <td align="right">01/02/2001</td> 
    </tr> 
    <tr> 
    <td>Thrawl</td> 
    <td align="right">$9,550</td> 
    <td align="right">159</td> 
    <td align="right">100%</td> 
    <td>Co-Owner</td> 
    <td align="right">11/07/2003</td> 
    </tr> 
    <tr class="alternateRow"> 
    <td>Marhanen</td> 
    <td align="right">$223.04</td> 
    <td align="right">83</td> 
    <td align="right">99%</td> 
    <td>Banker</td> 
    <td align="right">06/27/2006</td> 
    </tr> 
    <tr> 
    <td>Peter</td> 
    <td align="right">$121</td> 
    <td align="right">567</td> 
    <td align="right">23423%</td> 
    <td>FishHead</td> 
    <td align="right">06/06/2006</td> 
    </tr> 
    <tr class="alternateRow"> 
    <td>Jones</td> 
    <td align="right">$15</td> 
    <td align="right">11</td> 
    <td align="right">15%</td> 
    <td>Bubba</td> 
    <td align="right">10/27/2005</td> 
    </tr> 
    <tr> 
    <td>Supa-De-Dupa</td> 
    <td align="right">$145</td> 
    <td align="right">91</td> 
    <td align="right">32%</td> 
    <td>momma</td> 
    <td align="right">12/15/1996</td> 
    </tr> 
    <tr class="alternateRow"> 
    <td>ClickClock</td> 
    <td align="right">$1,213</td> 
    <td align="right">23</td> 
    <td align="right">1%</td> 
    <td>Dada</td> 
    <td align="right">1/30/1998</td> 
    </tr> 
    <tr> 
    <td>Mrs. Robinson</td> 
    <td align="right">$99</td> 
    <td align="right">99</td> 
    <td align="right">99%</td> 
    <td>Wife</td> 
    <td align="right">07/04/1963</td> 
    </tr> 
    <tr class="alternateRow"> 
    <td>Maha</td> 
    <td align="right">$19,923.19</td> 
    <td align="right">100</td> 
    <td align="right">100%</td> 
    <td>Owner</td> 
    <td align="right">01/02/2001</td> 
    </tr> 
    <tr> 
    <td>Thrawl</td> 
    <td align="right">$9,550</td> 
    <td align="right">159</td> 
    <td align="right">100%</td> 
    <td>Co-Owner</td> 
    <td align="right">11/07/2003</td> 
    </tr> 
    <tr class="alternateRow"> 
    <td>Marhanen</td> 
    <td align="right">$223.04</td> 
    <td align="right">83</td> 
    <td align="right">59%</td> 
    <td>Banker</td> 
    <td align="right">06/27/2006</td> 
    </tr> 
    <tr> 
    <td>Peter</td> 
    <td align="right">$121</td> 
    <td align="right">567</td> 
    <td align="right">534.23%</td> 
    <td>FishHead</td> 
    <td align="right">06/06/2006</td> 
    </tr> 
    <tr class="alternateRow"> 
    <td>Jones</td> 
    <td align="right">$15</td> 
    <td align="right">11</td> 
    <td align="right">15%</td> 
    <td>Bubba</td> 
    <td align="right">10/27/2005</td> 
    </tr> 
    <tr> 
    <td>Supa-De-Dupa</td> 
    <td align="right">$145</td> 
    <td align="right">91</td> 
    <td align="right">42%</td> 
    <td>momma</td> 
    <td align="right">12/15/1996</td> 
    </tr> 
    <tr class="alternateRow"> 
    <td>ClickClock</td> 
    <td align="right">$1,213</td> 
    <td align="right">23</td> 
    <td align="right">2%</td> 
    <td>Dada</td> 
    <td align="right">1/30/1998</td> 
    </tr> 
    <tr> 
    <td>Mrs. Robinson</td> 
    <td align="right">$99</td> 
    <td align="right">99</td> 
    <td align="right">(-10.42%)</td> 
    <td>Wife</td> 
    <td align="right">07/04/1963</td> 
    </tr> 
    <tr class="alternateRow"> 
    <td>Maha</td> 
    <td align="right">-$19,923.19</td> 
    <td align="right">100</td> 
    <td align="right">(-10.01%)</td> 
    <td>Owner</td> 
    <td align="right">01/02/2001</td> 
    </tr> 
    <tr> 
    <td>Thrawl</td> 
    <td align="right">$9,550</td> 
    <td align="right">159</td> 
    <td align="right">-10.20%</td> 
    <td>Co-Owner</td> 
    <td align="right">11/07/2003</td> 
    </tr> 
    <tr class="total"> 
    <td><strong>TOTAL</strong>:</td> 
    <td align="right"><strong>999999</strong></td> 
    <td align="right"><strong>9999999</strong></td> 
    <td align="right"><strong>99</strong></td> 
    <td > </td> 
    <td align="right"> </td> 
    </tr> 
</tbody> 
</table> 
</div> 
</td></tr> 
</table> 
</body> 
</html> 
+0

हाँ, यह लंबवत स्क्रॉलिंग के लिए काम करता है, लेकिन क्षैतिज स्क्रॉलिंग के लिए नहीं। सवाल में मैंने जो सामान्य समाधान बताया है। – pkaeding

+0

इस समाधान का कुछ अन्य लोगों पर एक बड़ा फायदा है, जो कि तालिका संरचना अभी भी बरकरार है और समझ में आता है। केवल हेडर लॉक करने के लिए यह संभवतः सबसे अच्छा संभव समाधान है। –

+0

टिप्पणी श्री शनी और न्यू के लिए धन्यवाद। क्या यह सब कुछ के बाद थोड़ा टक्कर (वोट में +1) हो सकता है? (नोट: यह एक समुदाय पोस्ट है, मेरे लिए कोई प्रतिनिधि लाभ नहीं) – VonC

-1

मैं कुछ हफ्ते पहले एक साइट पर भाग गया। यह लॉक किए गए पहले कॉलम का एक कामकाजी उदाहरण है लेकिन यह ब्राउज़र फ़ायरफ़ॉक्स के साथ संगत नहीं है। मैंने बहुत सी जांच नहीं की लेकिन ऐसा लगता है कि यह केवल आईई में काम करता है। लेखक के साथ प्रदान किए गए कुछ नोट्स हैं जिन्हें आप पढ़ सकते हैं।

लॉक पहला कॉलम: http://home.tampabay.rr.com/bmerkey/examples/locked-column-csv.html

अगर आप जावास्क्रिप्ट टेबल हेडर भी लॉक करने की आवश्यकता मुझे जानते हैं।

+0

जबकि यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) यहां उत्तर के आवश्यक हिस्सों को शामिल करने के लिए , और संदर्भ के लिए लिंक प्रदान करें ... वर्तमान में यह लिंक पहुंच योग्य नहीं है, यह एक टूटा हुआ जवाब है; ( – Nanne

0

आपको इसका परीक्षण करना होगा, लेकिन अगर आपने अपने पृष्ठ के भीतर एक आईफ्रेम एम्बेड किया है तो आईफ़्रेम पेज में 0,0 पर 0,कॉलम को पूरी तरह से स्थिति देने के लिए सीएसएस का उपयोग किया जाएगा, जिससे आपकी समस्या हल हो जाएगी?

+0

जब तक कि मैं आपको गलत समझ नहीं पा रहा हूं, मुझे नहीं लगता कि डेटा स्क्रॉल होने पर शीर्षलेख अपडेट करने की अनुमति होगी (यानी , जब डेटा स्क्रॉल हो जाता है तो पंक्ति शीर्षलेख नीचे स्क्रॉल करें ताकि पंक्ति शीर्षलेख अभी भी उचित पंक्तियों के अनुरूप हो)। – pkaeding

4

आपको दो टेबल की आवश्यकता है, जहां पहला व्यक्ति दूसरे पर एक सटीक ओवरले है। दूसरे में सभी डेटा शामिल हैं, जहां पहले व्यक्ति में केवल पहला कॉलम होता है। आपको इसकी चौड़ाई सिंक्रनाइज़ करना होगा और सामग्री के आधार पर इसकी पंक्तियों की ऊंचाई भी होगी।

इन दो तालिकाओं के अतिरिक्त, आपको तीसरे की आवश्यकता है। यह पहली पंक्ति है, जो कि दूसरे दो के बीच बिल्कुल सही है और उसी तरह सिंक्रनाइज़ किया जाना है।

आपको यहां पूर्ण स्थिति की आवश्यकता होगी। इसके बाद, आप डेटा पंक्ति के स्क्रॉलिंग को सिर पंक्ति और पहली कॉलम तालिका की स्क्रॉलिंग स्थिति के साथ सिंक्रनाइज़ करेंगे।

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

+0

यह मूल रूप से जाना चाहता था उससे अधिक जटिल है, लेकिन आखिरकार, मैं यही कर रहा था (अधिक या कम) ऐसा लगता है कि यह इससे कहीं अधिक आसान होना चाहिए .... – pkaeding

+0

मुझे लगता है कि यह अत्यधिक जटिल लगता है लेकिन मुझे इसके लिए कोई अन्य समाधान नहीं मिल रहा है। –

4

मैं अपने jQuery प्लगइन समाधान यहाँ पोस्ट किया है: Frozen table header inside scrollable div

यह आप क्या चाहते हैं और वास्तव में हल्के और उपयोग में आसान है नहीं करता है।

+0

यह डो पहले कॉलम को लॉक करने का समर्थन करने के लिए प्रतीत नहीं होता है। या क्या मैं कुछ न कुछ भूल रहा हूं? यदि नहीं, तो यह समाधान प्रश्न में उल्लिखित 'सामान्य' समाधान से बेहतर नहीं है। – pkaeding

+0

मैंने अपना डेमो पेज पहले कॉलम डेमो लॉक करने के साथ अपडेट किया है। – Mark

2

काफी कुछ पार ब्राउज़र यह आज, जो बीच में SuperTable जो मुझे पसंद कर रहे हैं के लिए अपने सुंदरता और सादगी (अब MooGrid के साथ जारी रखा जा रहा है) और SlickGrid सुविधाओं के अपने भयानक सेट के साथ की वजह से समाधान कर रहे हैं।

10

ओह अच्छा, मैं स्क्रॉल तालिका के लिए तय स्तंभ के साथ देखा इस विशिष्ट आवश्यकता की जरूरत को समझने के लिए और अपने प्रश्न कोई करीबी जवाब के साथ यह में से एक था ..

मैं इस सवाल Large dynamically sized html table with a fixed scroll row and fixed scroll column जो प्रदर्शन करने के लिए प्रेरित जवाब प्लगइन के रूप में मेरा काम https://github.com/meetselva/fixed-table-rows-cols

प्लगइन मूल रूप से एक अच्छी तरह से स्वरूपित HTML तालिका को एक निश्चित तालिका शीर्षलेख और कॉलम के साथ एक स्क्रॉल करने योग्य तालिका में परिवर्तित करता है।

उपयोग के रूप में नीचे है,

$('#myTable').fxdHdrCol({ 
    fixedCols : 3,  /* 3 fixed columns */ 
    width  : "100%", /* set the width of the container (fixed or percentage)*/ 
    height  : 500  /* set the height of the container */ 
}); 

आप देख सकते हैं demo and documentation here

+0

यह एक अच्छी प्लगइन है। एक कोणीय संस्करण के लिए कोई मौका? – kane

+0

मैंने आपके अच्छे काम का पालन किया और मेरे पास एक सवाल है, क्या यह सब इस तथ्य से पहले है कि आपको 'कॉलमोडाल' सरणी में निश्चित कॉलम चौड़ाई प्रदान करनी है? मेरे पास वेरिएबल कॉलम चौड़ाई वाला एक टेबल है और मुझे यह पता लगाना प्रतीत नहीं होता कि उस कोड को आपके कोड के साथ कैसे संचालित किया जा सकता है। मुझे आश्चर्य है कि क्या यह colModal की [चौड़ाई संपत्ति] पर एक कैस्केडिंग निर्भरता है (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:colmodel_options) 'चौड़ाई \t संख्या \t कॉलम की प्रारंभिक चौड़ाई सेट करें, में पिक्सल। वर्तमान में यह मान प्रतिशत ' – jxramos

3

मैं के संयोजन के साथ ऐसा किया: एकाधिक तालिकाओं

  • फिक्स्ड आकार कोशिकाओं

    • का उपयोग करना
    • jQuery की स्क्रॉलटॉप और स्क्रॉल लेफ्ट फ़ंक्शन

    प्रदर्शन करने के लिए यहां jsfiddle example है।

    सभी ब्राउज़रों पर परीक्षण नहीं किया है, लेकिन मुझे लगता है कि पुराने आईई संस्करणों पर यह बहुत अच्छा नहीं है।

    $("#clscroll-content").scroll(function() { 
     
        $("#clscroll-row-headers").scrollTop($("#clscroll-content").scrollTop()); 
     
        $("#clscroll-column-headers").scrollLeft($("#clscroll-content").scrollLeft()); 
     
    }); 
     
    
     
    $("#clscroll-column-headers").scroll(function() { 
     
        $("#clscroll-content").scrollLeft($("#clscroll-column-headers").scrollLeft()); 
     
    }); 
     
    
     
    $("#clscroll-row-headers").scroll(function() { 
     
        $("#clscroll-content").scrollTop($("#clscroll-row-headers").scrollTop()); 
     
    });
    .clscroll table { 
     
        table-layout: fixed; 
     
    } 
     
    
     
    .clscroll td, .clscroll th { 
     
        overflow: hidden; 
     
    } 
     
    
     
    .corner-header { 
     
        float: left; 
     
    } 
     
    
     
    .column-headers { 
     
        float: left; 
     
        overflow: scroll; 
     
    } 
     
    
     
    .row-headers { 
     
        clear: both; 
     
        float: left;  
     
        overflow: scroll; 
     
    } 
     
    
     
    .table-content { 
     
        table-layout: fixed; 
     
        float: left; 
     
        overflow: scroll; 
     
    } 
     
    
     
    .clscroll td, .clscroll th { 
     
        width: 200px; 
     
        border: 1px solid black; 
     
    } 
     
    
     
    .row-headers, .table-content { 
     
        height: 100px; 
     
    } 
     
    
     
    .column-headers, .table-content, .table-content table, .column-headers table { 
     
        width: 400px; 
     
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
     
    <div class="clscroll corner-header"> 
     
        <table> 
     
         <tr> 
     
          <th>&nbsp;</th> 
     
         </tr> 
     
        </table> 
     
    </div> 
     
    <div class="clscroll column-headers" id="clscroll-column-headers"> 
     
        <table> 
     
         <tr> 
     
          <th>Bus</th> 
     
          <th>Plane</th> 
     
          <th>Boat</th> 
     
          <th>Bicycle</th> 
     
         </tr> 
     
        </table> 
     
    </div> 
     
    <div class="clscroll row-headers" id="clscroll-row-headers"> 
     
        <table> 
     
         <tr> 
     
          <th>Red</th> 
     
         </tr> 
     
         <tr> 
     
          <th>Green</th> 
     
         </tr> 
     
         <tr> 
     
          <th>Blue</th> 
     
         </tr> 
     
         <tr> 
     
          <th>Orange</th> 
     
         </tr> 
     
         <tr> 
     
          <th>Purple</th> 
     
         </tr> 
     
         <tr> 
     
          <th>Yellow</th> 
     
         </tr> 
     
         <tr> 
     
          <th>Pink</th> 
     
         </tr> 
     
         <tr> 
     
          <th>Brown</th> 
     
         </tr> 
     
        </table> 
     
    </div> 
     
    <div class="clscroll table-content" id="clscroll-content"> 
     
        <table> 
     
         <tr> 
     
          <td>Red Bus</td> 
     
          <td>Red Plane</td> 
     
          <td>Red Boat</td> 
     
          <td>Red Bicycle</td> 
     
         </tr> 
     
         <tr> 
     
          <td>Green Bus</td> 
     
          <td>Green Plane</td> 
     
          <td>Green Boat</td> 
     
          <td>Green Bicycle</td> 
     
         </tr> 
     
         <tr> 
     
          <td>Blue Bus</td> 
     
          <td>Blue Plane</td> 
     
          <td>Blue Boat</td> 
     
          <td>Blue Bicycle</td> 
     
         </tr> 
     
         <tr> 
     
          <td>Orange Bus</td> 
     
          <td>Orange Plane</td> 
     
          <td>Orange Boat</td> 
     
          <td>Orange Bicycle</td> 
     
         </tr> 
     
         <tr> 
     
          <td>Purple Bus</td> 
     
          <td>Purple Plane</td> 
     
          <td>Purple Boat</td> 
     
          <td>Purple Bicycle</td> 
     
         </tr> 
     
         <tr> 
     
          <td>Yellow Bus</td> 
     
          <td>Yellow Plane</td> 
     
          <td>Yellow Boat</td> 
     
          <td>Yellow Bicycle</td> 
     
         </tr> 
     
         <tr> 
     
          <td>Pink Bus</td> 
     
          <td>Pink Plane</td> 
     
          <td>Pink Boat</td> 
     
          <td>Pink Bicycle</td> 
     
         </tr> 
     
         <tr> 
     
          <td>Brown Bus</td> 
     
          <td>Brown Plane</td> 
     
          <td>Brown Boat</td> 
     
          <td>Brown Bicycle</td> 
     
         </tr> 
     
        </table> 
     
    </div>

  • +0

    के रूप में सेट नहीं किया जा सकता है, बहुत अच्छी तरह से किया गया, धन्यवाद। मैंने फोकस किया कि केवल दो स्क्रॉलबार हैं http://jsfiddle.net/2sc64/ – manyways

    -1

    तुम कर सकते हो, बिना जावास्क्रिप्ट

    इस लिंक को देख: http://yonax73.blogspot.com/2014/09/tabla-con-cabecera-estatica-cuerpo-con.html

    या लाइव डेमो: http://jsfiddle.net/yonatanalexis22/aeeme8mt/7/

    table{ 
    border-spacing: 0; 
    display: flex;/*Se ajuste dinamicamente al tamano del dispositivo**/ 
    max-height: 40vh; /*El alto que necesitemos**/ 
    overflow-y: auto; /**El scroll verticalmente cuando sea necesario*/ 
    overflow-x: hidden;/*Sin scroll horizontal*/ 
    table-layout: fixed;/**Forzamos a que las filas tenga el mismo ancho**/ 
    width: 98vw; /*El ancho que necesitemos*/ 
    border:1px solid gray;} 
    
    +0

    ऐसा लगता है कि यह एक अलग समस्या हल करता है। आपके द्वारा लिंक किए गए jsfiddle में, सभी कॉलम क्षैतिज रूप से फिट होते हैं, इसलिए कोई क्षैतिज स्क्रॉलिंग नहीं होती है। मेरे प्रश्न का एक हिस्सा 'जब आप सही स्क्रॉल करते हैं, तो पहला कॉलम रहता है, क्योंकि इसमें पंक्तियों के लिए लेबल होते हैं।' और यदि वे सभी फिट नहीं होते हैं, तो आपका सीएसएस उन लोगों को छुपाएगा जो फिट नहीं हैं ('ओवरफ़्लो -x: छुपा ')। मैंने और कॉलम जोड़ने और उस सीएसएस नियम को हटाने का प्रयास किया, और स्क्रीन से स्क्रॉल किए गए पहले कॉलम को आजमाया। यह 'पहला स्तंभ लॉकिंग' हिस्सा है जो इसे एक कठिन समस्या बना देता है। – pkaeding

    1

    यहां एक प्लगइन JQuery: https://github.com/nitsugario/jQuery-Freeze-Table-Column-and-Rows

    यह एक jQuery प्लगइन है जो तालिका पंक्तियों और स्तंभों को स्क्रॉल नहीं कर सकता है। यह एक दिए गए एचटीएमएल टेबल ऑब्जेक्ट को ले सकता है और इसे सेट कर सकता है ताकि यह किसी दिए गए कॉलम या पंक्तियों या दोनों को फ्रीज कर सके, इसलिए निश्चित कॉलम या पंक्तियां स्क्रॉल नहीं होती हैं। जमे हुए पंक्तियों को टेबल हेड सेक्शन में रखा जाना चाहिए। यह colspan या rowspan विशेषताओं का उपयोग करने के साथ संयुक्त पंक्तियों और कॉलम भी जमा कर सकते हैं।

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

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