Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.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
Javascript多维数组表单html列表_Javascript_Jquery_Html_Arrays - Fatal编程技术网

Javascript多维数组表单html列表

Javascript多维数组表单html列表,javascript,jquery,html,arrays,Javascript,Jquery,Html,Arrays,我真的被一个大问题弄疯了。。。。 我有一个html列表,如: <ul> <li> <span>Fiat</span> <ul> <li>Punto</li> <li>Croma</li> </ul> </li> <li> <span>Ford</span>

我真的被一个大问题弄疯了。。。。 我有一个html列表,如:

<ul>
  <li>
    <span>Fiat</span>
    <ul>
      <li>Punto</li>
      <li>Croma</li>
    </ul>
  </li>
  <li>
    <span>Ford</span>
    <ul>
      <li>Focus</li>
      <li>Fiesta</li>
      <li>bla bla...</li>
    </ul>
  </li>
</ul>
  • 法令
    • 平托
    • 克罗马
  • 河流浅水处
    • 焦点
    • 嘉年华
    • 布拉布拉
(如有必要,我可以更改html,但这将是列表的总体思路) 现在。。。我需要使用javascript提示将数据放入两个文本框中,这样谁会键入几个字母,谁就会拥有列表

主要的问题是转换javascript数组中的列表,这样我就可以根据之前选择的品牌更新第二个文本框。。。 使用多维数组是个好主意吗? 有人能给我把嵌套列表转换成多维数组的代码吗? 解决这个问题的更好方法


提前感谢:)

我推荐这种结构:

[
    { brand: "Fiat", models: ["Punto", "Croma"] },
    { brand: "Ford", models: ["Focus", "Fiesta"] }
]
要从html构建它,可以执行以下操作:

var arr = [];
$("#main>li").each(function() {
    var elem = {
        brand: $(this).find(">span:first").text(),
        models: []
    };
    $(this).find(">ul>li").each(function() {
        elem.models.push($(this).text());
    });
    arr.push(elem);
});

您只需将id添加到第一个
ul

另一个可能很好的选项(您应该根据使用方式选择):

守则:

var objs = {};
$("#main>li").each(function() {
    var brand = $(this).find(">span:first").text();
    objs[brand] = [];
    $(this).find(">ul>li").each(function() {
        objs[brand].push($(this).text());
    });
});

如果您创建了多维数组或对象,然后从数组中创建列表和文本框,而不是从一个列表到另一个数组再到文本框,那会怎么样?不,我不会使用多维数组。这会使代码很难阅读,因为数组维度不是自解释的,而且它们的含义彼此非常不同。要将列表值放入数组,只需执行以下操作:
var listValues=$(“ul li”).map(函数(){return$(this.text();}).get()
@depperm我从代码后面创建那个列表(我从外部数据库访问那个列表),我真的不想把代码后面的数据解析成javascript。。。这让我觉得对可能发生的事情没有安全感,你只能在javascript数组中使用数字作为键。要获得类似于关联数组的东西,您必须使用对象。这正是我真正想要的:)非常完美:)
var objs = {};
$("#main>li").each(function() {
    var brand = $(this).find(">span:first").text();
    objs[brand] = [];
    $(this).find(">ul>li").each(function() {
        objs[brand].push($(this).text());
    });
});