【问题标题】:DataTables: trouble formatting to stripe rowsDataTables:格式化为条带行时遇到问题
【发布时间】:2014-09-08 21:04:09
【问题描述】:

问题:我有一个基本的网络应用程序正在运行以从用户那里获取一个 ID 号和一个日期,提交所述信息的结果从我的数据库中返回一个数据集。数据格式正确并显示在一个漂亮的 html 表中。我正在使用 DataTables 1.10.2 (http://www.datatables.net/) 来处理我的页面表格的格式。在 datatables .css 文件中,我可以更改颜色并将鼠标悬停在颜色和字体上,我可以根据需要更改列宽,但我无法让行显示为“条纹”演示文稿。这是我的网页的 html 文件(不是全部):

<!--- jQuery --->
<script src="../DataTables-1.10.2/media/js/jquery.js"></script>

<!--- DataTables --->
<script src="../DataTables-1.10.2/media/js/jquery.dataTables.js"></script>

<!-- <link rel="stylesheet" type="text/css" href="../DataTables-1.10.2/media/css/jquery.dataTables.css"> -->

<!--- DataTables CSS --->
<link rel="stylesheet" type="text/css" href="../DataTables-1.10.2/media/css/test.css">
<!--- <link rel="stylesheet" type="text/css" href="../DataTables-1.10.2/media/css/jquery.dataTables.css"> --->

<script> 
<!--- tells the browser to use DataTablkes to style the html tables --->
$(document).ready( function () {
$('#table_id').dataTable();
});

...

<p>Enter the Advertiser ID and the Date to start at that you wish to report for.</p>

<p>Keep the date in the format YYYY-Mon-DD</p>

<div>
<label>Date :</label>
<!-- <input id="dateSub" type="text" value="YYYY-Mon-DT"> -->
<input id="dateSub" type="text" value="2014-Sep-05">
<label>Advertiser Id :</label>
<input id="adSub" type="text" value="351155">
<input id="button1" type="button" value="Submit">
</div>

<table id="table_id" class="stripe" width="auto" cellspacing="0">
<thead>
    <tr>
        <th>Hour</th>
        <th>Count</th>
    </tr>
</thead>
<tbody>
</tbody>
</table>

此代码工作正常,按原样...无需尝试添加到标识 table_id 的脚本中以覆盖 DataTables 的默认功能,即:显示紧凑、悬停、条纹...仅默认的 '显示”的作品。

我希望能够通过 class='stripe' 将 DataTable 的显示设置为条纹表,但无法通过将 'stripe' 关键字添加到 HTML 表的 class="" 部分来实现。而这就是条带表的示例如何在我迄今为止阅读的文档中工作。同样在上面您会看到我注释掉了原始 datatables.css 文件并使用了“test.css”文件...它是 DataTables1.10.2 包随附的原始 datatables.css 文件的精确副本。此外,与 DataTables 包关联的所有其他文件在复制到我的 Web 服务器后都保持“原样”。

除了其他所有问题外,此问题都可以正常工作,但这将是一个非常好的功能。而且这个问题可能会阻碍我进一步发展,并且非常烦人。

添加了完整的 HTML 源文档:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>:: XXXXXXXXXXXXXXXXXXXXXx ::</title>

<link rel="icon" type="image/jpg" href="../images/icons/small_icon.jpg">

<style>
body {background-color:#C8C8C8;}
<!--- p {color: grey;} ---> 
</style>

</head>


<!--- loading in our scripts --->

<!--- JQuery --->
<script src="../DataTables-1.10.2/media/js/jquery.js"></script>

<!--- DataTables --->
<script src="../DataTables-1.10.2/media/js/jquery.dataTables.min.js"></script>


<!--- Datatables CSS --->
<!--- <link rel="stylesheet" type="text/css" href="../DataTables-1.10.2/media/css/jquery.dataTables.css"> --->
<link rel="stylesheet" type="text/css" href="../DataTables-1.10.2/media/css/test.css">


<script> 

$(document).ready( function () { $('#table_id').DataTable(); });

$(document).ready( function () {

////////
$('#button1').click(function(){
console.log('asdfasdf')
var date = $("#dateSub").val();
var adid = $("#adSub").val();
var dataString="adid="+adid+"&"+"qdate="+date;
console.log(date+" "+adid)

$.ajax({
type: "GET",
url: "/",
data: dataString,
cache: false,
success: function(data){
var jsonArr = $.parseJSON(data)
var body=$("#table_id").find('tbody')
console.log('returned')
body.empty()
for (var i=0;i<jsonArr.length;i++){
body.append('<tr><td>'+jsonArr[i].hour+'</td><td>'+jsonArr[i].count+'</td></tr>');
}
}
})
})
/////////
})
</script>

这是我在上面的代码 sn-p 中遗漏的所有内容,也许这将有助于缩小问题范围 :)

【问题讨论】:

    标签: javascript jquery datatables-1.10


    【解决方案1】:

    对我来说,似乎 dataTables 将“偶数”和“奇数”类添加到表中的每一行。您是否尝试过对它们应用 css 规则?

    这样的事情似乎对我有用:

    table tbody tr.even{
        color:#444;
    }
    

    因此,例如,当我的表格生成时,html 最终看起来像这样。

    <table class="dataTable" role="grid" aria-describedby="table_info">
        <thead>
            <tr><th>1</th><th>2</th><th>3</th><th>4</th></tr>
        </thead>
        <tbody>
            <tr class="odd" role="row">
                <td>1</td>
                <td class=" limitWidth">Dangerously</td>
                <td class=" limitWidth">Johnny</td>
                <td class="sorting_1">08/19/2014</td>
            </tr>
            <tr class="even" role="row">
                <td>2</td>
                <td class=" limitWidth" title="Jingleheimerschmidt">Jingleheimerschmidt</td>
                <td class=" limitWidth">John</td>
                <td class="sorting_1">06/12/2014</td>
            </tr>
        </tbody>
    </table>
    

    编辑:我搞砸了。这需要 css 中的冒号,而不是等号。

    【讨论】:

    • 感谢您的快速回复!我已经这样尝试过;但没有成功: ... ..... 还是应该将此代码放入 datatables.css 文件中?谢谢!
    • 生成的 html 最终看起来像我刚刚添加到答案中的示例吗?确保按照我的示例将类添加到行中。
    • 为了回答你刚才提出的问题,我认为它是否在 datatables.css 文件中并不重要,但我想它可能被覆盖了。您可以尝试在颜色上加上 !important 以进行检查,但我认为这不是“正确”的解决方案。
    • 另外,我错误地说在 css 中使用 '='。改用 ':' 试试。
    • S.布达,当我的表格显示在屏幕上时,底层的 html 与我在上面提交的没有什么不同。我正在使用 ajax 来更改表格的显示内容。我将添加整个 html 源代码。
    【解决方案2】:

    在处理数据表之后,您的代码对我来说没有什么特别突出的 - 所以我创建了一个快速小提琴 (http://jsfiddle.net/nrq49ort/1/) 您的代码并没有真正的问题,但是奇数行上的灰色背景非常微妙 - 所以它可能不会显示在您的屏幕上?我设置了以下 css - 不是很漂亮,但至少很难错过 ;)

    .odd {
          background-color: red !important;
    }
    

    【讨论】:

    • 感谢您的回复。当我将其添加到内联 css 和数据表 css 时,第一眼看到表格中没有任何内容,我看到第一行是红色的,在我将表单中的数据提交到在后台运行的 Web 应用程序之后,并且表格填充了表格的所有格式,条纹颜色等消失了......不知道这里发生了什么。可能是我正在通过 ajax 运行表单数据,然后这会改变数据表的显示方式吗?如果我将 css 规则放在 css 文件中并内联 css 规则,我认为不应该是这种情况......
    • 如何将新行添加到表中?你能显示一些代码吗?
    • 啊 - 我看到你已经添加了如何添加新行 - 它使发生的事情更加清楚。看看这里:datatables.net/examples/api/add_row.html 您需要将新行实际添加到 DataTable 对象,然后调用 draw() - 仅修改 DOM 不会添加正确的样式,并且不仅会破坏格式,还会破坏分页
    • hmm 现在通读并试图找出我应该将其添加到我的 js 中的位置...在上面我提供的完整脚本 sn-p 中,我想要这种类型的代码吗在这段 js 中:“$(document).ready(function () { $('#table_id').DataTable(); });”还是在包含ajax位的js部分?
    • 你想改变你的成功回调函数。像这样的东西(注意:未经测试!) var tbl = $("#table_id").DataTable();然后在你的循环中: t.row.add([jsonArr[i].hour, jsonArr[i].hour]);最后你需要确保你重新绘制你的表格(在你的 for 循环之外!)你确定你真的想清空整个表格,而不仅仅是将新行添加到你之前已经获取的内容中吗?您可以通过仅返回新添加的行并将其添加到表中来减少负载(因此,没有 for 循环,更少的解析,..)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多