使用jQuery迭代表并从元素值创建新变量

时间:2017-01-22 11:36:54

标签: javascript jquery arrays

我已经使用javascript对表格进行了迭代,因此我可以将数据用作变量,以便在Google地图上创建标记。我的地图和遍历表格的代码都有效,但我无法弄清楚如何在=INDEX(Sheet1!B:B,MATCH(Sheet2!A2,Sheet1!A:A,0)) 变量中提供gridmap值。我假设我需要在我的标记变量周围做一个for循环,我可能会想到,我很容易接受我的元素变量,并使它们可用作我的标记的变量。下面是我的代码,如果这有意义的话。我已经在这里工作了几个小时,现在是凌晨3:30;如果需要,我会在早上折射问题。谢谢。

这是更新且有效的代码:

我遍历DOM以仅从marker抓取<tr>元素。请注意tbody部分 - 这会跳过第一个标题行。然后我通过针对tr:gt(0)数组过滤掉markers来创建一个新数组。我仍然需要清理一下,添加更多功能,比如聚类,但我现在非常高兴,希望这会对其他人有所帮助。

gdata

1 个答案:

答案 0 :(得分:0)

您似乎也在使用Angular,并且id='gridmap' div正在返回对象名称而不是内容。 div内容的性质看起来像问题的症结所以建议看看这个问题:How to show object property with Angularjs

从这里开始,如果你可以在Angular完成它之后生成看起来像这样的HTML,那么通过将属性插入到数据标记中来保持属性不在视图中:

<tr>
   <td> ..... </td>
   <td> ..... </td>
   <td> ..... </td>
   <td class='gridmap' data-lat='23.424' data-lng='-117.233'>a0</td>
</tr>

如果插入整个对象(包括大括号),则可能需要执行额外的JSON字符串化和解析,以便更好地避免这种情况。

请注意,HTML id标签应仅用于唯一的DOM元素,因此如果您有多个表行,则它应该是一个类(这也意味着相应地调整您的css)

现在我们可以使用jquery data来查询相同的HTML单元格标记并传递给grLat和grLng变量:

    $('tr').each(function (i) {
        var $tds = $(this).find('td').eq(8), // moved the eq(8) here
            gLabel = htmlLabel[i],
            gridmap = $tds.text(),
            grLat = Number($tds.data('lat')), // get the lat data
            grLng = Number($tds.data('lng')); // get the lng data

        console.log(
            'Marker:' + gLabel
            + '\nRow:' + (i + 1)
            + '\nGrid Map: ' + gridmap
            + '\nGrid lat: ' + grLat
            + '\nGrid lng: ' + grLng   // check components
        );

        var marker = new google.maps.Marker({
            position: {lat: grLat, lng:grLng}, // recomposed object
            map: map,
            label: labels[labelIndex++ % labels.length],
            animation: google.maps.Animation.DROP

        });
    })

这应该让你处于更好的调试位置