通过 jQuery 中的 id 获取我的 td 细胞的价值

getting value of my td cells by id in jQuery

我在 google chrome.

上检查元素时可以看到以下 HTML
<table id="table_id">
    <tr role="row" class="odd">
        <td id="aptDate0" class="sorting_1">2015-03-08</td>
        <td id="aptDateEnd0" style="display:none;">2015-03-08</td>
        <td id="Start0">10:30:00</td>
        <td id="End0">11:30:00</td>
        <td id="Duration0">01:00:00</td>
        <td>John Doe</td>
        <td>Jane Doe<td>
        <td id="Status0">n/a</td>
    </tr>
    <tr role="row" class="odd">
        <td id="aptDate1" class="sorting_1">2015-03-08</td>
        <td id="aptDateEnd1" style="display:none;">2015-03-08</td>
        <td id="Start1">10:30:00</td>
        <td id="End1">11:30:00</td>
        <td id="Duration1">01:00:00</td>
        <td>John Doe</td>
        <td>Jane Doe<td>
        <td id="Status1">n/a</td>
    </tr> ... and so on
</table>

我以前使用的是 document.getElementById('id').innerHTML 但现在我必须在我的 $(document).ready(function() 中调用该函数所以我需要使用 jQuery 来获取值。

我有以下循环:

for (i=0; i < 10; i++){

    var aptDate = $('#table_id #aptDate'+i).textContent;
    //textContent returns undefined
    var aptDate = $('#table_id #aptDate'+i).text();
    //.text() returns an empty string
    var aptDate = $('#table_id #aptDate'+i).val();
    //.val() returns undefined
    var aptDate = $('#table_id #aptDate'+i).html;
    //.html retturns function (e){return x.access(this,function(e){var       n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<></>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)}
    console.log(aptDate);
 }

我的数据table初始化如下:

 $('#table_id').dataTable({
                bProcessing: true,
                bServerSide: true,
                "sAjaxSource": "script.php",
                "rowCallback": function( row, data, index ) {

                    if ( data[9] == "0" ) {
                        $('td:eq(9)', row).html('Not scanned');
                        $('td:eq(9)', row).css("color", "red");
                    }
                    else if (data[9] !== data[12]){
                        $('td:eq(9)', row).html('Incorrect QR Scanned');
                        $('td:eq(9)', row).css("color", "red");
                    }
                    else{
                        $('td:eq(9)', row).html('Scanned');
                    }
                    $('td:eq(1)', row).css("display", "none");
                    $('td:eq(12)', row).css("display", "none");
                    $('td:eq(13)', row).css("display", "none");

                    $('td:eq(0)', row).attr("id", "aptDate"+index);
                    $('td:eq(1)', row).attr("id", "aptDateEnd"+index);
                    $('td:eq(2)', row).attr("id", "Start"+index);
                    $('td:eq(3)', row).attr("id", "End"+index);
                    $('td:eq(4)', row).attr("id", "Duration"+index);
                    $('td:eq(7)', row).attr("id", "Status"+index);
                    $('td:eq(8)', row).attr("id", "hasInternet"+index);
                    $('td:eq(9)', row).attr("id", "QRScanned"+index);
                    $('td:eq(12)', row).attr("id", "suID");
                    $('td:eq(13)', row).attr("display", "aptID");
                    //update();
                  }
});

如何获取我的 td 细胞的内部HTML。我可以看到它们在屏幕上的 table 上都有值。

编辑 我忘记提到我正在使用数据table。这与为什么这些解决方案对我不起作用有什么关系吗?

var aptDate = $('#table_id #aptDate'+i).html()

会起作用。但不是一个好的解决方案。 您可以获得这样的值:

$('#aptDate'+i).html()

$('#aptDate'+i).text()

我根据您的示例创建了一个 jsfiddle,它使用 id 属性从您的示例中获取值。 http://jsfiddle.net/jydq09L5/2/

但基本上我使用的是原生 Javascript,因为它看起来是最佳解决方案。如果您不必使用 jQuery 那么这是更好的方法,即使它在 jQuery 文档就绪函数中也是如此。

var val = document.getElementById("Start0").innerHTML;
alert(val);
<table class="table table-bordered">
    <tr role="row" class="odd">
        <td id="aptDate0" name="data" class="sorting_1">2015-03-08</td>
        <td id="aptDateEnd0" name="data" style="display:none;">2015-03-08</td>
        <td id="Start0" name="data">10:30:00</td>
        <td id="End0" name="data">11:30:00</td>
        <td id="Duration0" name="data">01:00:00</td>
        <td name ="data" id="name1">John Doe</td>
        <td name="data" id="name1">Jane Doe</td>
        <td name="data" id="Status0">n/a</td>
    </tr>
    <tr role="row" class="odd">
        <td id="aptDate1" name="data" class="sorting_1">2015-03-08</td>
        <td id="aptDateEnd1" name="data" style="display:none;">2015-03-08</td>
        <td id="Start1" name="data">10:30:00</td>
        <td id="End1" name="data">11:30:00</td>
        <td id="Duration1" name="data">01:00:00</td>
        <td name="data" id="name2">John Doe</td>
        <td name="data" id="name2">
            Jane Doe
        </td>
        <td id="Status1" name="data">n/a</td>
    </tr>
</table>


<script>

    $('td[name=data]').click(function () {
        alert($(this.id).html());
    });

</script>

尝试上面的代码,它对我有用,我只是在名称单元格中添加了 id,并为所有单元格提供了相同的 ID,因此我可以通过 jquery 中的单个函数获得 html 个单元格。 ..

试一试。

使用.text() 或.html(),.val() 用于获取value="" 属性。也可以使用原生 javascript 属性 'textContent'.

http://jsfiddle.net/8f0oac6o/2/

for (i=0; i < 2; i++){
    var aptDate = $('#table_id #aptDate'+i).text();
    console.log(aptDate);
    var aptDate = $('#table_id #aptDate'+i).html();
    console.log(aptDate);
     var aptDate = document.getElementById ( "aptDate"+i ).textContent;
     console.log(aptDate);
 }

你的循环从 0 运行到 9。你确定你有足够的行吗?当存在 td 时,.html() returns 是正确的值。但是,当 td 不存在时,.html returns 提到的函数和 .html() returns undefined.

在我的数据表初始化中尝试了 initComplete 和 drawCallback 参数后,都没有用。

然后我终于让它工作了:

$('#table_id').on( 'draw.dt', function () {
    update();
    //update fn contains my loop
});