De l'Index ou de la taille est négatif ou plus grand que le montant autorisé (non négative des indices)
Lors de l'utilisation de Firefox, j'obtiens le message d'erreur décrit dans la ligne d'objet de ce bloc de code:
for(var i = 0; i < tables.length; i++)
{
var j = rows.length - 1;
while(j--)
{
if(hideDP && tables[i].innerHTML.indexOf(">D<") != -1)
{
if(!platTag && !soulSilverTag && pearlTag)
{
tables[i].deleteRow(j);//ERROR IS ON THIS LINE
}
}
}//end while loop (rows)
}//end for loop (tables)
Je soupçonne que cette erreur est parce que je suis un peu nouveau pour faire inverser les boucles, mais j'ai précisément fait une boucle de retournement dans cet exemple parce qu'il fait de la suppression de lignes d'une table plus facile. Notez aussi que j est quelque chose comme 24 et je est 0, donc ils sont non-négatives. Quelqu'un pourrait-il éclairer sur ce pour moi?
EDIT : Le code complet peuvent être trouvés ici.
Sur la ligne à laquelle l'erreur est-elle déclenchée?
Il est environ 6 lignes à partir de la fin, en fait. Je lui ai dit "ERREUR SUR CETTE LIGNE" pour essayer de le faire ressortir. J'ai inclus le code des autres juste pour le contexte.
Je ne vois pas où i est défini nulle part dans le code que vous avez posté, donc vraisemblablement la valeur de i est où est le problème.
faut-il dire quelle ligne l'erreur se produit sur ? qui pourrait nous donner une meilleure idée
N'importe qui ont des idées? J'ai édité l'OP pour rendre le code plus facile de voir en un coup d'œil.
Il est environ 6 lignes à partir de la fin, en fait. Je lui ai dit "ERREUR SUR CETTE LIGNE" pour essayer de le faire ressortir. J'ai inclus le code des autres juste pour le contexte.
Je ne vois pas où i est défini nulle part dans le code que vous avez posté, donc vraisemblablement la valeur de i est où est le problème.
faut-il dire quelle ligne l'erreur se produit sur ? qui pourrait nous donner une meilleure idée
N'importe qui ont des idées? J'ai édité l'OP pour rendre le code plus facile de voir en un coup d'œil.
OriginalL'auteur KongMD | 2011-03-15
Vous devez vous connecter pour publier un commentaire.
Strictement travaillait actuellement affiché le code, voici les questions que je vois:
Posté le code est incomplet. Où est
rows
être initialisé? Cela pourrait provoquer l'erreur énoncée.Donné
while(j--)
; Levar j = rows.length - 1;
ligne est incorrecte. C'est, sauf vous savez que la dernière ligne ne sera jamais besoin de supprimer. Mais si c'est le cas, de le commenter le code pour le rendre clair.Par exemple, si il y avait 4 lignes, le code actuel initialise
j
à 3, mais à cause de l'emplacement de la--
de l'opérateur, à l'intérieur de la boucle voit: 2, 1, 0. Pour le code comme indiqué, l'utilisationvar j = rows.length;
ou ajouter un commentaire à montrer que la logique est délibérée.Le 2
if()
états ne dépend pas dej
à tous! (À moins que le code est disponible ici.) Si cela est vrai, puis déplacez les conditions à l'extérieur de laj
boucle.Envisagent de publier la version intégrale et non, code. Ou un lien sur un site comme Pastebin.
Mise à jour pour le script complet, maintenant qu'elle est liée:
Scannant le code complet, il ressemble à
tables[i].deleteRow(j);
peut être appelée plusieurs fois pour la même ligne.La solution de facilité, qui doit être fait de toute façon, c'est d'ajouter un
relevé après chaque ligne à supprimer.
Pour le crédit supplémentaire, de revoir et de simplifier le drapeau et
if
logique aussi. 🙂Mise à jour de la page cible, maintenant qu'elle est liée:
L'examen de la page cible, les tables bouclée par ce script contient des tableaux imbriqués.
Qui déclenche le nombre de lignes dans cette ligne:
var rows = tables[i].getElementsByTagName("tr");
Parfois faisant croire que tableau[i] a plus de lignes qu'elle ne détient directement.
Solution, utilisez la fonction intégrée dans les lignes de la matrice, de sorte que la ligne devient:
var rows = tables[i].rows;
~~~~
Tout en examinant le script par rapport à la page cible, quelques autres questions semblait évident:
C'est pas le mieux pour faire une boucle dans toutes les tables. Cible seulement ceux dont vous avez besoin. Donc:
tables = document.getElementsByTagName("table");
Devrait être changé en:
...qui permettra de sélectionner uniquement les 4 charge utile tables, et non pas de leur sous-tables ou l'autre des tableaux dispersés.
Par réglage fin de la première table de sélection, les éléments suivants, problamatic, le test n'est pas nécessaire:
var
en face de lamajorSections
d'initialisation.Mise à jour de ma réponse après l'écrémage, le fichier complet/code.
Oui, il semble que j'ai oublié le continue. Le "else if" états de la conditionnelles sont principalement à des fins de débogage, et je vais les enlever une fois que je reçois ce toutes aplanies. Malheureusement, après l'ajout de tous les continue, je suis toujours le même message d'erreur. Si vous êtes intéressé à voir où cela serait utile, regarde cette page et de voir l'état de délabrement de la learnset tableau semble. C'est aussi la page que je vais utiliser pour le test. le Script que j'utilise.
Vous êtes me faire travailler pour celui-ci. 🙂 De toute façon, le code fait une hypothèse qui n'est pas valide compte tenu de l'objectif de la page. Voir ma réponse mis à jour.
Je vous remercie beaucoup pour votre aide sur ce, Brock. C'est vraiment une bonne chose de savons maintenant sur le querySelectorAll, car elle permet de filtrer les tables imbriquées beaucoup plus facile. - Je prendre de la ">" symbole est indicative des éléments d'enfant? Donc, si je comprends bien, la nouvelle affectation pour le var tables est à dire le document pour sélectionner tous les divs avec la classe "KonaBody" que l'enfant les éléments de la table avec la classe "roundy". Suis-je le droit?
OriginalL'auteur Brock Adams
Que l'erreur sera également généré si j >= le nombre de lignes dans le tableau, mais je ne vois pas le problème exact.
OriginalL'auteur JaredMcAteer