Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 从数组内部使用脚本_Jquery_Arrays - Fatal编程技术网

Jquery 从数组内部使用脚本

Jquery 从数组内部使用脚本,jquery,arrays,Jquery,Arrays,我正在尝试为用户生成的具有未知数量的列和行的表的每个单元格分配一个键: e、 例如,HTML <table> <tr> <td> <select class="colheaders"> <option value="firstname"> first name</option> <option value="familyname"> Fa

我正在尝试为用户生成的具有未知数量的列和行的表的每个单元格分配一个键:

e、 例如,HTML

    <table>
     <tr>
      <td>
       <select class="colheaders">
        <option value="firstname"> first name</option>
        <option value="familyname"> Family name</option>
       </select>
     </td>
    </tr>
    <tr>
     <td>
      <select class="colheaders">
       <option value="firstname"> first name</option>
       <option value="familyname"> Family name</option>
      </select>    
     </td>
   </tr>

   <tr>
    <td>Bob</td>
    <td>Smith</td>
   </tr>

  <tr>
    <td>John</td>
    <td>Jones</td>
   </tr>
</table>
“col1”将是从同一行中选择的选项。一旦通过AJAX发布,我将能够返回一个key->value数组

e、 g

我目前有:

var TableData = new Array();
var colheaders = new Array();
var namerows = new Array();

$('.colheaders option:selected').each(function() {
    colheaders.push($(this).val());
});

var i;
for (i = 0; i < colheaders.length; i++) { 
    namerows.push('"' + colheaders[i]  + '" : $(tr).find("td:eq(' + i + ')").text()');
}   

$('#mytable tr').each(function(row, tr) {
    TableData[row] = namerows 
});

等等

我不知道这是否回答了你的问题,但是如果你有一个包含函数的字符串,即

var hi = "function hi() {alert('hi');}"
使用

这将“加载”函数,然后您可以使用

hi();
我会让整个功能:

$('#mytable tr').each(function(row, tr) {
TableData[row] = {
    "col1": $(tr).find('td:eq(1)').text(), 
    "col2": $(tr).find('td:eq(2)').text(), 
    "col3": $(tr).find('td:eq(3)').text()
}
});
^一个字符串,然后使用该字符串。因此,当您为namerows生成逻辑时,将其包装在包含外部函数的更大字符串中

i、 e


我不知道这是否回答了你的问题,但是如果你有一个包含函数的字符串,比如

var hi = "function hi() {alert('hi');}"
使用

这将“加载”函数,然后您可以使用

hi();
我会让整个功能:

$('#mytable tr').each(function(row, tr) {
TableData[row] = {
    "col1": $(tr).find('td:eq(1)').text(), 
    "col2": $(tr).find('td:eq(2)').text(), 
    "col3": $(tr).find('td:eq(3)').text()
}
});
^一个字符串,然后使用该字符串。因此,当您为namerows生成逻辑时,将其包装在包含外部函数的更大字符串中

i、 e


为什么你需要让事情变得不必要的复杂化。
eval
从来都不是推荐的选项。试着阅读更多关于它的信息

逻辑很简单。
.colheaders
中所选选项的计数(称之为n)是我们拥有的列数。因此,您可以做的是,在
each
函数中,创建一个循环,循环计数到n,并获取每个
td
的列数据。然后在循环的末尾,您将拥有一个对象,该对象保存表行列的数据

试试这样的

var TableData = new Array();
var temp = {};
var selected = $('option:selected').map(function(){
    return this.value;
}).get();
var i;
var tableRows = $('#mytable tr');
tableRows.each(function(row, tr) {
    for (i = 0; i < selected.length; i++) {
        temp = {};
        temp['col' + (i + 1)] = tableRows.children('td').eq( selected[i] ).text();
    }
    TableData[row] = temp;
});
var TableData=new Array();
var temp={};
var selected=$('option:selected').map(函数(){
返回此.value;
}).get();
var i;
var tableRows=$(“#mytable tr”);
tableRows.each(函数(行,tr){
对于(i=0;i
为什么要让事情变得不必要的复杂化。
eval
从来都不是推荐的选项。试着阅读更多关于它的信息

逻辑很简单。
.colheaders
中所选选项的计数(称之为n)是我们拥有的列数。因此,您可以做的是,在
each
函数中,创建一个循环,循环计数到n,并获取每个
td
的列数据。然后在循环的末尾,您将拥有一个对象,该对象保存表行列的数据

试试这样的

var TableData = new Array();
var temp = {};
var selected = $('option:selected').map(function(){
    return this.value;
}).get();
var i;
var tableRows = $('#mytable tr');
tableRows.each(function(row, tr) {
    for (i = 0; i < selected.length; i++) {
        temp = {};
        temp['col' + (i + 1)] = tableRows.children('td').eq( selected[i] ).text();
    }
    TableData[row] = temp;
});
var TableData=new Array();
var temp={};
var selected=$('option:selected').map(函数(){
返回此.value;
}).get();
var i;
var tableRows=$(“#mytable tr”);
tableRows.each(函数(行,tr){
对于(i=0;i
您可以映射表行并使用以下方法获取相关TDs文本:

var TableData = $('table tr').map(function(i, tr) {
    var row = {};
    $(tr).children('td').each(function(z, td) {
        return row['col' + z] = td.innerHTML;
    });
    return row;
}).get();
看看它是否符合您的预期行为:


您可以映射表行并使用以下方法获取相关TDs文本:

var TableData = $('table tr').map(function(i, tr) {
    var row = {};
    $(tr).children('td').each(function(z, td) {
        return row['col' + z] = td.innerHTML;
    });
    return row;
}).get();
看看它是否符合您的预期行为:



无论你想做什么,都是在过度复杂化。那么,预期的行为是什么呢?提供MCVE,如果不清楚,则应更清楚。第一个示例是我想要生成的,但不是col1、col2等。。用下拉菜单中的值替换col-x。此外,列的数量可能会有所不同。无论您试图做什么,您实际上是在过度复杂化它。那么,预期的行为是什么呢?提供MCVE,如果不清楚,则应更清楚。第一个示例是我想要生成的,但不是col1、col2等。。用下拉菜单中的值替换col-x。此外,列的数量可能会有所不同。谢谢,这似乎仍然不起作用。当我通过ajax发布TableData[row]时,我看到的是脚本而不是值。我稍微编辑了一下我的答案-这仍然不起作用吗?不幸的是,没有,我感觉问题可能是我如何将字符串推到namerows中?谢谢,这似乎仍然不起作用。当我通过ajax发布TableData[row]时,我看到的是脚本,而不是值。我对答案进行了轻微的编辑——这仍然不起作用吗?不幸的是,不行,我觉得问题可能是我如何将字符串推到名称行中?这可能是一个更好的注释,至少可以解释为什么eval不是一个推荐选项-我不是一个专家,我只是想在没有其他人的情况下提供帮助had@aspiring_programmer我会试着做一个解释。这是一个漂亮得多,但产生的结果同样的错误。(我用例子更新了问题)@MF_it我做了一个改变,你能检查一下吗?据我所知,这就是OP所期望的,也许是一个更好的评论,至少可以解释为什么eval不是一个推荐的选项——我不是一个专家,我只是想在没有其他人的情况下提供帮助had@aspiring_programmer我会试着做一个解释。这要漂亮得多,但也会产生同样的错误。(我已经用示例更新了问题)@MF_it我做了一个更改,你能检查一下吗?据我所知,这就是OP所期望的。我认为OP中的所选选项数与
$('.colheaders option:selected')
有关。可能他不想获得所有列。没有什么意义。@RejithRKrishnan哦,是的,我错过了。这就是为什么有问题的MCVE会更有用…:)这是正确的Rejith,通过将col-'x'替换为所选的.colheaders,我可以为cel的htmltank you@a.Wolff分配一个值,并感谢链接。我读过这本书,尽管我仍然不善于把自己说清楚(@MF_it You很清楚,不仅仅是你的代码…:)但是提供了一个