任何人都可以解释我怎么做,jquery的api真的缺乏这个。以下代码有什么问题?
var arr = $(value).filter(function() { return $(this).is("TD"); } ).html();
alert(arr[1]);
我只想获取td的innerHTML / text并将其放入数组
答案 0 :(得分:1)
html()
函数以及text()
和width()
等类似函数会返回第一个匹配元素的标量值。
如果你想要一个包含每个匹配元素的HTML内容的数组,你应该调用map()
,如下所示:
var arr = $(value).children('td').map(function() { return $(this).html(); }).get();
alert(arr[0]); //Alerts HTML of first <td> element
答案 1 :(得分:1)
将.map()
与.get()
一起使用是一种方法:
var arr = $(value).map(function() {
var $th = $(this);
if($th.is("TD")) return $th.html();
}).get();
alert(arr);
我不确定value
代表什么,但如果您更改选择器以仅匹配td
元素,则可以使用return $(this).html();
简化return语句。
.map()
遍历元素,并将返回值添加到jQuery对象。 .get()
只从jQuery对象中检索数组。
value
的声音是tr
。然后你可以这样做:
var arr = $(value).children('td').map(function() {
return $(this).html();
}).get();
alert(arr);
要创建一个数组,每个项目包含该行的td
元素的html数组,您可以这样做:
var arr = [];
$('tr').each(function() {
arr.push($(this).children('td').map(function() {
return $(this).html();
}));
}).get();
console.log(arr);
这使用标准.push()
,因为我不认为在.map()
内使用.map()
会起作用。我认为当你将内部数组传递给jQuery对象时,它只是将它添加到主数组(或其他东西)。
答案 2 :(得分:0)
.html()
功能:
描述:获取HTML的内容 集合中的第一个元素 匹配的元素。
许多正在检索值的jQuery函数都是如此。所以发生的事情是你的过滤器函数返回一组jQuery元素,但你的.html()函数导致arr
只从集合中的第一个元素分配html。