Javascript 将jQuery数据表显示为<;a>;链接而不是<;选择>;下拉列表
我正在尝试使用jQuery Datatables插件。它有我想要的一切,除了在如何显示Javascript 将jQuery数据表显示为<;a>;链接而不是<;选择>;下拉列表,javascript,jquery,jquery-datatables,Javascript,Jquery,Jquery Datatables,我正在尝试使用jQuery Datatables插件。它有我想要的一切,除了在如何显示aLengthMenu变量方面没有任何灵活性。它在一个下拉列表中显示,这很好,但我的设计不灵活,只希望变量作为链接 这是它当前的显示方式: "aLengthMenu": [[5, 15, 30, 60, -1], [5, 15, 30, 60, "All"]] 我希望它能像这样显示链接,这样你只需点击一个链接,它就会像这样显示指定的数量: 我知道我正在搞乱Datatables插件的核心,更具体地说是\fn
aLengthMenu
变量方面没有任何灵活性。它在一个
下拉列表中显示,这很好,但我的设计不灵活,只希望变量作为链接
这是它当前的显示方式:
"aLengthMenu": [[5, 15, 30, 60, -1], [5, 15, 30, 60, "All"]]
我希望它能像这样显示链接,这样你只需点击一个链接,它就会像这样显示指定的数量:
我知道我正在搞乱Datatables插件的核心,更具体地说是
\fnffeaturehtmllength
函数,但如果我能在这方面得到一些帮助,那就太棒了。如果不打开jquery.Datatables.js文件并对其进行编辑,这是很难做到的。
是的,你是对的。。。您必须编辑“\u fnffeaturehtmllength”函数
我正在使用jquery.dataTables.js版本1.9.1
转到“\u fnfeaturehmllength”函数(在文件中搜索“function\u fnfeaturehmllength(oSettings)”,您应该可以在第2296行找到它)
既然你正在编辑这个文件,我就先备份一下。此外,请注释掉要替换的行,以便随时可以引用它们
编辑
function _fnFeatureHtmlLength(oSettings) {
if (oSettings.oScroll.bInfinite) {
return null;
}
/* This can be overruled by not using the _MENU_ var/macro in the language variable */
var sName = 'name="' + oSettings.sTableId + '_length"';
//var sStdMenu = '<select size="1" '+sName+'>';
var sStdMenu = '';
var i, iLen;
var aLengthMenu = oSettings.aLengthMenu;
if (aLengthMenu.length == 2 && typeof aLengthMenu[0] === 'object' &&
typeof aLengthMenu[1] === 'object') {
for (i = 0, iLen = aLengthMenu[0].length; i < iLen; i++) {
//sStdMenu += '<option value="' + aLengthMenu[0][i] + '">' + aLengthMenu[1][i] + '</option>';
sStdMenu += '<a href="#" value="' + aLengthMenu[0][i] + '">' + aLengthMenu[1][i] + '</a>';
}
}
else {
for (i = 0, iLen = aLengthMenu.length; i < iLen; i++) {
//sStdMenu += '<option value="' + aLengthMenu[i] + '">' + aLengthMenu[i] + '</option>';
sStdMenu += '<a href="#" value="' + aLengthMenu[i] + '">' + aLengthMenu[i] + '</a>';
}
}
//sStdMenu += '</select>';
var nLength = document.createElement('div');
if (!oSettings.aanFeatures.l) {
nLength.id = oSettings.sTableId + '_length';
}
nLength.className = oSettings.oClasses.sLength;
nLength.innerHTML = '<label>' + oSettings.oLanguage.sLengthMenu.replace('_MENU_', sStdMenu) + '</label>';
/*
* Set the length to the current display length - thanks to Andrea Pavlovic for this fix,
* and Stefan Skopnik for fixing the fix!
*/
//$('select option[value="' + oSettings._iDisplayLength + '"]', nLength).attr("selected", true);
//$('select', nLength).bind('change.DT', function (e) {
$('a', nLength).bind('click', function (e) {
//var iVal = $(this).val();
e.preventDefault();
var iVal = $(this).attr('value');
/* Update all other length options for the new display */
var n = oSettings.aanFeatures.l;
for (i = 0, iLen = n.length; i < iLen; i++) {
if (n[i] != this.parentNode) {
//$('select', n[i]).val(iVal);
}
}
/* Redraw the table */
oSettings._iDisplayLength = parseInt(iVal, 10);
_fnCalculateEnd(oSettings);
/* If we have space to show extra rows (backing up from the end point - then do so */
if (oSettings.fnDisplayEnd() == oSettings.fnRecordsDisplay()) {
oSettings._iDisplayStart = oSettings.fnDisplayEnd() - oSettings._iDisplayLength;
if (oSettings._iDisplayStart < 0) {
oSettings._iDisplayStart = 0;
}
}
if (oSettings._iDisplayLength == -1) {
oSettings._iDisplayStart = 0;
}
_fnDraw(oSettings);
});
//$('select', nLength).attr('aria-controls', oSettings.sTableId);
return nLength;
}
但是你可以设计它。此外,在我编辑的函数中的单击事件中,您可能希望向所选的“a”标记和样式添加一个“活动”类。只需记住从所有其他“a”中删除活动类
我还没有完全测试这些更改,因为我没有编写数据表,所以我不知道这些更改是否会有任何副作用。我也没有测试任何插件。。。因此,使用风险自负
.dataTables_length a{
margin-right:6px;
}