如何在javascript中更正此for循环?

时间:2013-04-27 00:44:04

标签: javascript

我正在尝试创建一个for循环,它将获取ul中每个项的值,然后从这些元素创建一个字符串。而$(“#sortable li:nth-​​child(1)”)。text();工作(用2,3,4替换1等)并将每个项目一次放入一个,下面的for语句一次拉出整个ul。我该如何解决这个问题?

        info = ''
        for (var i =1; i <= 7; i++) {
          value = $("#sortable li:nth-child(i)").text();
          alert(value);
          info = info + ',' + value;
        }
        alert(info);



<ul id="sortable">
  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 1</li>
  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 2</li>
  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 3</li>
  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 4</li>
  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 5</li>
  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 6</li>
  <li class="ui-state-default"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span>Item 7</li>
</ul>

3 个答案:

答案 0 :(得分:5)

该参数被解析为字符串。您需要停止字符串并首先连接i的值:

$("#sortable li:nth-child(" + i + ")").text();

答案 1 :(得分:0)

尝试这个而不是循环。

var info = $('#sortable li').slice(0,7).map(function(){
  return $.trim($(this).text());
}).toArray().join(', ');

console.log(info);
//=> "Item 1, Item 2, Item 3, Item 4, Item 5, Item 6, Item 7"

答案 2 :(得分:0)

这是你想要达到的目标吗?使用element.querySelectorAll

var lis = document.querySelectorAll("li"),
    array = [];

Array.prototype.forEach.call(lis, function (li) {
    array.push(li.textContent);
});

alert(array.join(","));

jsfiddle

或者使用Array.forEach

而不是Array.map
var lis = document.querySelectorAll("li"),
    array = Array.prototype.map.call(lis, function (li) {
        return li.textContent;
    });

alert(array.join(","));

jsfiddle

使用jQuery selectorsjQuery.each

也是如此
var lis = $("li"),
    array = [];

$.each(lis, function (index, li) {
    array.push($(li).text());
});

alert(array.join(","));

jsfiddle

或使用jQuery.map

var lis = $("li"),
    array = lis.map(function () {
        return $(this).text();
    }).toArray();

alert(array.join(","));

jsfiddle

如果您特别希望将其保留为for循环,我确定您是否要使用jquery选择器,那么您可以从上面的示例中找出答案。

var lis = document.querySelectorAll("li"),
    length = lis.length,
    array = [];

for (i = 0; i < length; i += 1) {
    array.push(lis[i].textContent);
}

alert(array.join(","));

jsfiddle