简体   繁体   English

如何动态获取表“ Td”值

[英]How to get Table “Td” values dynamically

I have small requirement, have one table and all td's contains text boxes with respected values. 我的要求不高,只有一张桌子,所有td都包含带有受尊重值的文本框。 Once we click on submit button, all table data should convert XML formated data. 单击提交按钮后,所有表数据都应转换为XML格式的数据。

I tried with below code, xml formated data is generated, but text showing empty. 我尝试使用以下代码,生成了xml格式的数据,但文本显示为空。 I'm struggling to get table td values. 我正在努力获取table td值。 Here is the code : 这是代码:

$(".multipleData tbody tr").each(function() {
    bodyRowSet = bodyRowSet + "<row>";
    $(this).find('td:not(:last-child)').each(function() {
        $td = $(this);
        /* Getting trouble here start*/
        var tdValue = $(this).val();
        /* Getting trouble here end*/
        var $th = $td.closest('table').find('th').eq($td.index()).html();
        bodyRowSet = bodyRowSet + "<" + $th + ">" + tdValue + "</" + $th + ">";  
    });
    bodyRowSet = bodyRowSet + "</row>";
});

Expected alert : 预期警报:

<?xml version="1.0" encoding="UTF-8">
<rowsets>
    <rowset>
         <row>
            <Header1>111111111</Header1>
            <Header2>AAAAAA</Header2>
            <Header3>3000</Header3>
            <Header4>MyBatch</Header4>
            <Header5>22222</Header5>
            <Header6>Y</Header6>
        </row>
        <row>
            <Header1>222222</Header1>
            <Header2>BBBBBB</Header2>
            <Header3>4000</Header3>
            <Header4></Header4>
            <Header5>MyBatch2</Header5>
            <Header6>N</Header6>
        </row>
        <row>
            <Header1>333333333</Header1>
            <Header2>CCCCCC</Header2>
            <Header3>5000</Header3>
            <Header4>MyBatch3</Header4>
            <Header5>555555555</Header5>
            <Header6>Y</Header6>
        </row>
    </rowset>
</rowsets>

Here is the FIDDLE 这是FIDDLE

Seems like you wanna fetch data from input inside td , not the entire td content. 似乎您想从td内部的input获取数据,而不是整个td内容。

Error here 错误在这里

var tdValue = $(this).val();

Change into this 换成这个

 // find the input and fetch it value
 var tdValue = $(this).find('input').val();

Everything should be fine. 一切都应该没问题。 Updated DEMO 更新了演示

You need to locate the input using find() 您需要使用find()找到输入

var tdValue = $(this).find('input').val();

Check the updated snippet 检查更新的代码段

  $(document).ready(function(){ $("#idXmlData").click(function(){ var xmlStart = "<?xml version=\\"1.0\\" encoding=\\"UTF-8\\">"; var xml = xmlStart; var xmlFirstRowSet = "<rowsets><rowset>"; var xmlLast="</rowset></rowsets>"; xmlFirstRowSet = xmlFirstRowSet; var headerRowSet=''; headerRowSet = headerRowSet; xmlFirstRowSet = xmlFirstRowSet + headerRowSet; var bodyRowSet =''; $(".multipleData tbody tr").each(function() { bodyRowSet = bodyRowSet + "<row>"; $(this).find('td').each(function() { $td = $(this); var tdValue = $(this).find('input').val(); var $th = $td.closest('table').find('th').eq($td.index()).html(); bodyRowSet = bodyRowSet + "<" + $th + ">" + tdValue + "</" + $th + ">"; }); bodyRowSet = bodyRowSet + "</row>"; }); xml = xmlStart + xmlFirstRowSet + bodyRowSet+xmlLast; window.alert(xml); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <table class="multipleData" style="border:1px solid #000000;"> <thead style="background:grey;"> <tr> <th>Header1</th> <th>Header2</th> <th>Header3</th> <th>Header4</th> <th>Header5</th> <th>Header6</th> </tr> </thead> <tbody> <tr> <td><input type="text" value="111111111"></td> <td><input type="text" value="AAAAAA"></td> <td><input type="text" value="3000"></td> <td><input type="text" value="MyBatch"></td> <td><input type="text" value="22222"></td> <td><input type="text" value="Y"></td> </tr> <tr> <td><input type="text" value="222222"></td> <td><input type="text" value="BBBBBB"></td> <td><input type="text" value="4000"></td> <td><input type="text" value="MyBatch2"></td> <td><input type="text" value="333333"></td> <td><input type="text" value="N"></td> </tr> <tr> <td><input type="text" value="333333333"></td> <td><input type="text" value="CCCCCC"></td> <td><input type="text" value="5000"></td> <td><input type="text" value="MyBatch3"></td> <td><input type="text" value="555555555"></td> <td><input type="text" value="Y"></td> </tr> </tbody> </table> <input type="button" name="" value="XML Data" id="idXmlData" 

Issue was in the below line . 问题在下面的行中。

var tdValue = $(this).find("input").val();

Please see the updated link http://jsfiddle.net/kishoresahas/t9y1337e/2/ 请查看更新的链接http://jsfiddle.net/kishoresahas/t9y1337e/2/

You try to get the value of the td instead of the inner input. 您尝试获取td的值,而不是内部输入。 Fixed that for you. 为您修复了该问题。

  $(document).ready(function(){
$("#idXmlData").click(function(){
var xmlStart =  "<?xml version=\"1.0\" encoding=\"UTF-8\">";
var xml = xmlStart;
var xmlFirstRowSet = "<rowsets><rowset>";
var xmlLast="</rowset></rowsets>";
xmlFirstRowSet = xmlFirstRowSet;
var headerRowSet='';
headerRowSet = headerRowSet;
xmlFirstRowSet = xmlFirstRowSet + headerRowSet;
var bodyRowSet ='';
$(".multipleData tbody tr").each(function() {
    bodyRowSet = bodyRowSet + "<row>";
    $(this).find('td').each(function() {
        var $td = $(this);
        var tdValue = $(this).find('input').val();
        var $th = $td.closest('table').find('th').eq($td.index()).html();
        bodyRowSet = bodyRowSet + "<" + $th + ">" + tdValue + "</" + $th + ">";  
    });
    bodyRowSet = bodyRowSet + "</row>";
});

xml = xmlStart + xmlFirstRowSet + bodyRowSet+xmlLast;
 window.alert(xml);     
});

}); });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM