Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

James Parker

Comment résoudre cette erreur? Qu'est-ce que j'ai fait de mal qui peut avoir causé cela?

Dans la console Chrome, j'obtiens Échec de l'exécution de «insertBefore» sur «Node»: le paramètre 1 n'est pas de type «Node». pour cette ligne de code

rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);

Qui peut être trouvé vers la fin. Je ne sais pas comment corriger cette erreur ou en quoi consiste cette erreur.

console.log("CONNECTED");
var n = 1;
tester(n);

function tester(n){
var switchcount = 0;
var  table = document.getElementById("myTable2");
var monthsArray= ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];//0-11    

var switching = true;
// Set the sorting direction to ascending:
var dir = "asc";
// Check the status of each data cell in a table. 
while(switching){
    switching = false;
    var rows = table.rows;      
    var shouldSwitch;

    for (var i = 1; i < (rows.length-1); i++) { 
        var cellsX = rows[i].getElementsByTagName("TD")[n];
        var cellsY = rows[i + 1].getElementsByTagName("TD")[n];
        var dateX = cellsX.textContent.split(" ");
        var dateY = cellsY.textContent.split(" ");
        var mnthX = dateX[0];
        var mnthY = dateY[0];
        var yearX = dateX[1];
        var yearY = dateY[1];
        var totalX = parseInt(monthsArray.indexOf(mnthX)) + parseInt(yearX);
        var totalY = parseInt(monthsArray.indexOf(mnthY)) + parseInt(yearY);

        if(dir === "asc"){
            if(totalX < totalY) {
                //if so, mark as a switch and break the loop:
                shouldSwitch = true;
                break;
            }
        }else if(dir === "desc"){
            if(totalX > totalY){
                shouldSwitch = true;
                break;
            }
        }
    }
    if(shouldSwitch){
        rows[i].parentNode.insertBefore(rows[i + 1], rows[i]);
        switching = true;
        switchcount++;
    }else{
        if (switchcount === 0 && dir === "asc") {
            dir = "desc";
            switching = true;
        }

    }
}

}

ma table que je trie par mois et par année.

<table id ="myTable2">
    <thead>
        <tr>
            <th>Client</th>
            <th>Due Date</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Smith</td>
            <td>Apr 18</td>
        </tr>
        <tr>
            <td>Kelly</td>
            <td>Jan 18</td>
        </tr>
        <tr>
            <td>Park</td>
            <td>Nov 18</td>
        </tr>
        <tr>
            <td>Mark</td>
            <td>July 19</td>
        </tr>
    </tbody>
</table>
NicolasB

Réponse modifiée:

Il n'y a pas rows[i+1]lorsque vous êtes il'index du dernier élément de la ligne. Votre problème est que dans la partie ci-dessus de votre code, se itrouve la valeur qui iavait après la forboucle, qui est la première valeur à laquelle le test de boucle a i < (rows.length-1)échoué. Par conséquent, à ce stade du code, vous devriez toujours avoir i === (rows.length-1), ce qui n'est pas ce que vous voulez.

Un moyen d'éviter ce problème d'utilisation d'une variable de boucle en dehors de la boucle (ce qui est rarement le but et toujours difficile à lire / comprendre / déboguer, etc.) est d'écrire vos boucles avec letau lieu de var, si cela ne vous dérange pas de ne pas prendre en charge les anciennes navigateurs:

for (let i = 1; i < (rows.length-1); i++) {

De cette façon, ine sera pas défini en dehors de votre boucle, et vous aurez une erreur facile à comprendre vous en informant si vous essayez d'utiliser iplus bas votre code à un endroit où cela ne signifie pas n'importe quoi.


Cependant, il y a encore d'autres erreurs dans le code. En particulier, vous ne sortez jamais de votre whileboucle. J'espère que vous pourrez le comprendre par vous-même maintenant que vous savez comment corriger l'erreur que vous avez eue. Mais si je devais trier une table en utilisant du JavaScript brut, je le ferais probablement:

  • Obtenez une liste de toutes les lignes de mon tableau,
  • Triez-les en utilisant la fonction de tri intégrée avec une fonction de comparaison bien choisie,
  • Supprimez toutes les lignes du DOM en utilisant remove ,
  • Ajoutez-les dans le bon ordre en utilisant appendChild dans une forboucle sur le tableau trié.

Ce serait beaucoup plus facile à lire et à déboguer. Ecrire votre propre fonction de tri est un bon exercice, mais si votre objectif est une fonctionnalité Web et ne pas pratiquer l'algorithmique, ne le faites pas.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Filtrer le dataframe basé sur plusieurs colonnes d'un autre dataframe

  2. 2

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  3. 3

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  4. 4

    Comment envoyer plusieurs variables de la lame au contrôleur

  5. 5

    Comment afficher du texte au milieu de div avec une couleur d'arrière-plan différente?

  6. 6

    Microsoft.WebApplication.targets

  7. 7

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  8. 8

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  9. 9

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  10. 10

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  11. 11

    Concaténer des variables dans ansible

  12. 12

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  13. 13

    Filtrer les données en fonction des conditions d'une trame de données

  14. 14

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  15. 15

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  16. 16

    comment afficher un bouton au-dessus d'un autre élément ?

  17. 17

    php ajouter et fusionner des données de deux tables

  18. 18

    Stop jQuery execution after one time execution

  19. 19

    Pourquoi Phantomjs ne fonctionne pas avec ce site ?

  20. 20

    obtenir le nombre de marqueur affiché sur la carte

  21. 21

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

chaudétiquette

Archive