如何将html中的列表项解析为javascript数组

时间:2012-08-22 06:01:50

标签: php javascript json

我要将数组表单php传递给javascript,我的解决方案是使用php生成一个html列表项,如下所示:

<ul id="data" class="hidden">
  <li value="0"> 
    <ul>
      <li value="id">1</li> 
      <li value="productLine">Vintage Cars</li> 
    </ul>
  </li>
  <li value="1"> 
    <ul>
      <li value="id">2</li> 
      <li value="productLine">Ships</li>    
    </ul>
   </li>
   <li value="2"> 
    <ul>
      <li value="id">3</li> 
      <li value="productLine">Trains</li>   
    </ul>
  </li>
</ul>

并使用javascript DOM API将其转换为多维关联数组:

function selectProductLine(){
    var rootUlNode = document.getElementById('data');
    var rootLiNodes = rootUlNode.children;
    var hiddenHash = {};
    for(var i=0;i< rootLiNodes.length;i++){
        var rootLiNodeValue = rootLiNodes[i].getAttribute('value');     
        var liNodes = rootLiNodes[i].firstElementChild.children;
        for(var i=0; i < liNodes.length;i++){
            hiddenHash[rootLiNodeValue] = {};
            var liNodeValue = liNodes[i].getAttribute('value');
            var liNodeContent = liNodes[i].textContent;
            hiddengegHash[rootLiNodeValue][liNodeValue] = liNodeContent;
        }
    }
return hiddenHash;
}

但是运行代码会导致我的浏览器崩溃,所以我无法调试它,任何人都可以指出我的问题在哪里?而且我认为应该有一种元素方式将数据从php传输到javascript,就像使用json一样,有人可以提供更好的解决方案或资源吗?

3 个答案:

答案 0 :(得分:1)

如果您有PHP数组,则可以使用[json_encode][1]将其呈现为JSON对象。例如:

<?php
$arr = array(
    array('id' => 1, 'productLine' => 'Vintage Cars'),
    array('id' => 2, 'productLine' => 'Ships')
);
echo 'var products = ' . json_encode($arr) . ';';
?>

会像这样呈现:

var products = [ { 'id': 1, 'productLine': 'Vintage Cars' }, { 'id': 2, 'productLine': 'Ships' } ];

答案 1 :(得分:0)

更好的方法是在PHP中将数据结构编码为JSON,然后在生成的字符串客户端上调用JSON.parse()。您可以使用json_encode对数据进行编码,使用json2.js来解析字符串。

小心地适当地转义JSON字符串。

答案 2 :(得分:0)

好吧,我的脚本几乎可以告诉我。但是你从底部拼错了hiddenHash 5行。如果我只是将hiddengeghash更改为hiddenhash,它在jsfiddle至少运行时没有错误。我冒昧地添加了一个document.write,以确保它实际上返回一个数组。

http://jsfiddle.net/2WBjJ/

我还将第二个i更改为i2,因为它们在同一个循环中使用