附加到具有特定类的每个元素

时间:2018-06-29 02:25:34

标签: javascript jquery html web-applications

我在下面显示了一个jQuery脚本。假设获得AWS ML预测并比较分数,并根据分数附加到表中单元格的正确预测。所有这些单元格都具有相同的类prediction。单击该按钮并触发此脚本后,它可以正确执行所有操作,但是到达附加部分时,它将引发错误,提示Cannot read property 'append' of undefined

当我在chrome控制台中运行相同的脚本时,它会正确附加到正确的位置。我不太确定为什么会这样。

    $(document).ready(function(){
        var highPred="";
        $("#predict").click(function(){
        var predictionTables = $(".prediction");
            for (var i = 0; i < 4; i++) {
                var predictedScoresAWS=[];
                var params = {
                  Record: myData[i]
                };
                machinelearning.predict(params, function(err, data) {
                  if (err){
                    console.log(err, err.stack); // an error occurred
                  } else{
                    console.log(data);           // successful response
                    // data = $.parseJSON(data);
                    predictedScoresAWS.push(data.Prediction.predictedScores['Reduce purge history day count']);
                    predictedScoresAWS.push(data.Prediction.predictedScores['Increase the java heap space']);
                    predictedScoresAWS.push(data.Prediction.predictedScores['Successful run']);
                    predictedScoresAWS.push(data.Prediction.predictedScores['Other error']);
                    console.log(predictedScoresAWS)
                    var highPredIndex = predictedScoresAWS.indexOf(Math.max(...predictedScoresAWS))
                    switch(highPredIndex){
                        case 0:
                            highPred='Reduce purge history day count';
                            break;
                        case 1:
                            highPred='Increase the java heap space';
                            break;
                        case 2:
                            highPred='Successful run';
                            break;
                        case 3:
                            highPred='Other error';
                    }
                    console.log(highPred);
                    console.log(predictionTables);
                    console.log(predictionTables[i])
                    while (predictedScoresAWS.length) { predictedScoresAWS.pop(); }
                    predictionTables[i.].append(highPred);
                    }
                });
            }
        });
    });

1 个答案:

答案 0 :(得分:0)

当将下标与jQuery集合一起使用时,它将返回DOM对象,而不是jQuery对象。您应该使用.eq()获取jQuery对象,然后才能调用jQuery append()方法。

predictionTables[i].append(highPred);

应为:

predictionTables.eq(i).append(highPred);

另一个问题是您试图在异步回调中使用迭代变量i。有关此问题和许多解决方案的问题,请参见JavaScript closure inside loops – simple practical exampleJavascript infamous Loop issue?。如果可以使用ES6,只需将var i = 0更改为let i = 0

相关问题