我希望使用javascript从我的幻想体育团队网站上的表中获取值(并最终总结)。我还希望正确地将其命名为良好的形式和实践。
以下工作代码尝试过滤掉空行,留下我关心的DOM表行数组。
playerRow = jQuery(".pncPlayerRow");
players = []
var realRows = function(){
playerRow.each(function(){
if (jQuery(this).eq(0).children().eq(7).text() != "--"){
players.push(this);
}
})
return(players); // returns array of non-empty <tr>
}
realRows();
现在,当我尝试命名这个时,我得到一个未定义的返回值。这是我的代码:
FantasyStats = {}
FantasyStats.collect = function(){
var playerRow = jQuery(".pncPlayerRow");
var players = []
var realRows = function(){
playerRow.each(function(){
if (jQuery(this).eq(0).children().eq(7).text() != "--"){
players.push(this);
}
})
return(players);
}
realRows();
}
FantasyStats.collect()
我这样做错了吗?有什么建议吗?
答案 0 :(得分:2)
如果您希望FantasyStats.collect
返回realRows
的返回值,则需要添加return
:
// ...
return realRows(); // <== On this line at the end of `collect`
}
FantasyStats.collect()
附注:您的代码似乎依赖于The Horror of Implicit Globals(在您的第一个版本中,您不会声明playerRow
或players
;在您的第二个版本中,您不会#&# 39; t声明FantasyStats
)。强烈建议声明您的变量。您可以使用strict mode来强制执行该习惯。
附注二:通常我主张人们编写更多功能(例如,拿大片并将它们分成一系列较小的功能),但在这种情况下,我并不是真的看到realRows
函数正在为您做任何事情:
var FantasyStats = {};
FantasyStats.collect = function(){
var playerRow = jQuery(".pncPlayerRow");
var players = [];
playerRow.each(function(){
if (jQuery(this).children().eq(7).text() != "--"){
players.push(this);
}
});
return players;
};
FantasyStats.collect();
我添加了var
,还添加了几个缺失的分号,.eq(0)
之后jQuery(this)
永远不会有任何目的(根据定义,jQuery集由jQuery(this)
已经只有一个元素。)
进一步说,你重新发明了jQuery的filter
功能,你可以使用它来代替:
var FantasyStats = {};
FantasyStats.collect = function(){
return jQuery(".pncPlayerRow").filter(function(){
return jQuery(this).children().eq(7).text() != "--");
}).get();
};
FantasyStats.collect();
(注意最后的.get()
将jQuery集转换为普通数组。)
或者这个稍微容易调试的版本:
var FantasyStats = {};
FantasyStats.collect = function(){
var players = jQuery(".pncPlayerRow").filter(function(){
return jQuery(this).children().eq(7).text() != "--");
}).get();
return players;
};
FantasyStats.collect();
答案 1 :(得分:1)
解决此问题的两种方法:
1 /.
FantasyStats = {}
FantasyStats.collect = function(){
var playerRow = jQuery(".pncPlayerRow");
var players = []
var realRows = function(){
playerRow.each(function(){
if (jQuery(this).eq(0).children().eq(7).text() != "--"){
players.push(this);
}
})
return players;
}
return realRows(); // return return of realRows => players Array.
}
FantasyStats.collect()
2 /。
FantasyStats = {}
FantasyStats.collect = function(){
var playerRow = jQuery(".pncPlayerRow");
var players = []
var realRows = function(){
playerRow.each(function(){
if (jQuery(this).eq(0).children().eq(7).text() != "--"){
players.push(this);
}
})
}
realRows();
return players; // return players array after it was filled by realRows function
}
FantasyStats.collect();
我建议第二个。