Строки в массиве больше не являются строками после jQuery.each()
Я довольно запутался в поведении массивов строк, когда я их цикл через метод jQuery.each()
. По-видимому, строки становятся объектами jQuery внутри функции обратного вызова. Однако я не могу использовать метод this.get()
для получения исходной строки; это приводит к тому, что сообщение this.get не является функцией. Я полагаю, причина в том, что это не DOM node. Я могу сделать $(this).get()
, но моя строка становится массивом (от "foo"
до ["f", "o", "o"]
).
Как я могу вернуть его в строку? Мне нужно получить переменную типа String
, потому что я передаю ее другим функциям, которые сравнивают значения между ними.
Я прилагаю автономный тестовый пример (требуется консоль Firebug):
<!DOCTYPE html>
<html>
<head><title></title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript"><!--
$(function(){
var foo = [];
var $foo = $(foo);
foo.push("987");
$foo.push("987");
foo.push("654");
$foo.push("654");
$.each(foo, function(i){
console.log("foo[%d]: object=%o; value=%s; string=%o", i, this, this, $(this).get()); // this.get() does not exist
});
$foo.each(function(i){
console.log("$foo[%d]: object=%o; value=%s; string=%o", i, this, this, $(this).get()); // this.get() does not exist
});
});
//--></script>
</head>
<body>
</body>
</html>
Ответы
Ответ 1
edit/clarification: функции calllback принимают два аргумента, второй - значение переменной. Используйте его вместо this
Я тестировал оба варианта, и все, кажется, работает как ожидалось (строки все еще строки).
>>> $.each(['foo','bar'], function(i, s){ console.info( s, typeof s ) })
foo string
bar string
>>> $(['foo','bar']).each(function(i, s){ console.info( s, typeof s ) })
foo string
bar string
Ответ 2
Это работает в моем Firefox 3.5:
$(function(){
var foo = [];
foo.push("abc");
foo.push("def");
$.each(foo, function(i){
console.log(typeof ("" + this));
});
});
Консоль показывает
string
string