Jquery选择器中的Javascript窗口变量

时间:2013-04-19 17:54:58

标签: javascript jquery

我正在尝试优化代码,但却遇到了一些错误。这些执行正确:

Array.prototype.forEach.call( $('ZA1 .stat'), function( td ) {//ExcuteCode}
Array.prototype.forEach.call( $('ZA2 .stat'), function( td ) {//ExcuteCode}
Array.prototype.forEach.call( $('ZA19 .stat'), function( td ) {//ExcuteCode}
Array.prototype.forEach.call( $('ZA20 .stat'), function( td ) {//ExcuteCode}

试图压缩到这个,但得到错误:

for (var trType in allTr) {
    //console.log(trType);
    Array.prototype.forEach.call( $( window[trType]+' .stat'), function( td ) {
    //Excute Code
    }

在控制台中,我收到以下错误:

未捕获错误:语法错误,无法识别的表达式:[object Object] .stat

我可以在jquery选择器中使用window []吗?

2 个答案:

答案 0 :(得分:0)

好吧,只需组合所有选择器:

$('ZA1 .stat, ZA2 .stat, ZA3 .stat').each(function(i, td) {
    // do stuff
});

如果您想优化此代码,您也可以使用.querySelectorAll()而不是使用半jQuery / half JavaScript。

答案 1 :(得分:0)

你得到的错误是window[trType]变量中有一个javascript对象,当它运行window[trType] + ' .stat'时,它不知道该做什么,因为没有对象+字符串运算符定义。

尝试使用window[trType].find()。使用上下文时,jQuery .find()方法与$()的工作方式相同。所以window[trType].find(".stat");会在window[trType]中找到属于stat类的所有元素。

您也可以将Array.prototype.forEach.call(替换为$.each(

如果你打算这样做,你可以使用:

window[trType].find('.stat').each(function(td){