2015-11-04 2 views
2

В JQuery, как сделать для зацикливания функции внутри html() действияJQuery функция внутри HTML() действие

file = var cars = ["Saab", "Volvo", "BMW"]; 

$(".selector").html(function(){ 
    for(i = 0; i < file.length; i++){ 
     return "<li>"+file[i]+"</li>"; 
    } 
}); 

эти строки кода возвращает только первую строку в файле

<li>Saab</li> 

но им ищет

<li>Saab</li> 
<li>Volvo</li> 
<li>BMW</li> 

ответ

3

В вашем коде вы возвращались из самой функции с первой итерации для цикла, поэтому он будет показывать только первый. Таким образом, вы можете сделать что-то простое с помощью join(). В коде нет необходимости в цикле и обратном вызове.

var file = ["Saab", "Volvo", "BMW"]; 
 
$(".selector").html("<li>" + file.join('</li><li>') + "</li>")
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul class="selector"></ul>

Или вы можете использовать map()

var file = ["Saab", "Volvo", "BMW"]; 
 
$(".selector").html(file.map(function(v) { 
 
    return $('<li/>', { 
 
    text: v 
 
    }) 
 
}))
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<ul class="selector"></ul>

+0

кажется, так легко :), но им путать, как это –

+0

@ пн-вс: прочитать документ, https: //developer.mozilla.org/en/docs/Web/JavaScript/ Ссылка/Global_Objects/Array/join и https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/map –

+0

в производительности, которую вы предпочитаете? –

-1

вам нужно использовать .html?

Потому что, глядя на вашу ситуацию, я бы предпочел использовать .each(). Это должно выглядеть примерно так.

var file = ["a","b","c"]; 

$.each(file, function(index, value) { 
    //create element using value; 
    //append element to wherever you think is necessary 
}) 
+0

у вас есть идея, почему он использует .html()? –

+0

nope. Я никогда не использовал .html(). Единственное, что я видел, что он пытался сделать, это получить этот вывод из массива: - ?. Поэтому я рекомендую использовать .each, так как это быстрее: -? –

1

Существует 2 ошибки в коде

первый это определить массив в неправильном

file = var cars = ["Saab", "Volvo", "BMW"]; //wrong 

var file = ["Saab", "Volvo", "BMW"]; // correct way 
var cars = ["Saab", "Volvo", "BMW"]; // correct way 

второй неправильно место оператора возврата внутри цикла

Почему ваш код не работает? из-за return "<li>"+file[i]+"</li>"; return останавливает выполнение и выходит из функции. return всегда выполняет свою функцию немедленно, без дальнейшего выполнения, если он находится внутри цикла.

попробовать это

var file = ["Saab", "Volvo", "BMW"]; 
 
    
 
    $(".selector").html(function(){ 
 
     var str ='' 
 
     for(i = 0; i < file.length; i++){ 
 
      str += "<li>"+file[i]+"</li>"; 
 
     } 
 
     
 
     return str 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<ul class="selector"></ul>

+0

ах! yahh !!! Я забыл счетчик для возвращения, спасибо! –

0

Я думаю, вы должны определить свои ВАР таким образом: var file = cars = ["Saab", "Volvo", "BMW"]; и вы можете использовать Array.map() метод.

var file = cars = ["Saab", "Volvo", "BMW"]; 
 

 
$(".selector").html(function(){ 
 
    return file.map(function(el){ return "<li>"+el+"</li>"; }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="selector"></ul>

Смежные вопросы