【问题标题】:Appending to each element with a specific class附加到具有特定类的每个元素
【发布时间】:2018-06-29 02:25:34
【问题描述】:

我有一个如下所示的 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);
                    }
                });
            }
        });
    });

【问题讨论】:

    标签: javascript jquery html web-applications


    【解决方案1】:

    当您将下标与 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

    【讨论】:

    • 我确实尝试过使用它,但是当我这样做时,我没有收到任何错误,但我没有看到将字符串附加到表格单元格中。 @Barmar
    • 我刚刚注意到这是 for 循环中的异步回调。所以你遇到了这个问题:stackoverflow.com/questions/750486/…
    • 抱歉回复晚了,我确实找到了解决办法。似乎由于某种原因,附加并没有真正像那样工作。但我确实尝试了其他 stackoverflow 问题的答案,并且能够让它工作。谢谢!
    猜你喜欢
    • 2019-03-06
    • 2022-08-03
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2015-01-23
    • 2015-11-08
    相关资源
    最近更新 更多