为什么这个javascript无法正常工作

时间:2012-05-30 14:06:36

标签: javascript jquery arrays

我正在尝试构建一个功能,用于将面包屑添加到我网站的导航中。但是,现在我有两个问题。 1)由于某种原因,crumb数组一次只能容纳2个面包屑,2),即使html元素存储在crumbs数组中,也只会呈现新的crumb的HTML。另一个面包屑呈现为:

[object HTMLLIElement]

// script

function add_crumb(name) {

    // get current bread crumbs
    var crumbs = $('#breadcrumbs ul li').toArray();

    // no current bread crumbs, so we don't need an arrow image
    if (crumbs.length == 0) {

        var new_crumb = "<li class='crumb' style='display:inline'> " + name + " </li>";

    } else {

        var new_crumb = "<li class='crumb' style='display:inline'><img class='bc_arrow' src='images/icons/breadcrumb_arrow.png' width='19' height='18'> " + name + "</li>";

    }

    // add new bread crumb to array
    crumbs.push(new_crumb);

    // render
    $('#breadcrumbs').html('<ul>' + crumbs.join('') + '</ul>');


}

无论如何,我已经通过创建一个新的空白数组并在每个元素上调用.innerHTML来解决第二个问题(尽管我不明白为什么我必须这样做,因为jQuery的网站说这些元素是这样存储的:

[<li id="foo">, <li id="bar">]

但如果有人可以帮我弄清楚为什么它一次只能存放两个面包屑,我真的非常感谢它。

由于

2 个答案:

答案 0 :(得分:4)

HTML元素对象不是字符串,您不能简单地使用.join将它们连接到字符串。尝试附加它们。

$('#breadcrumbs').html('<ul />').find("ul").append(crumbs);

答案 1 :(得分:2)

$('#breadcrumbs ul li').toArray();为您提供了一个HTMLLIElements数组。

你应该采取不同的方法。不需要任何数组:

if($('#breadcrumbs ul li').length){
    $('#breadcrumbs ul').append(
      "<li class='crumb' style='display:inline'>"
        + name +
      "</li>");
}else{
    $('#breadcrumbs ul').append(
      "<li class='crumb' style='display:inline'>"
        + "<img class='bc_arrow' src='images/icons/breadcrumb_arrow.png' width='19' height='18'>" +
        + name + 
      "</li>");
}