2017-10-05 4 views
1

Disons que j'ai un site Web et que je veux utiliser un script qui boucle ses éléments DOM et qui pointe ces éléments que cet attribut contient une partie du texte spécifié. J'ai réussi à créer une boucle simple qui trouve tous les attributs souhaités de l'élément DOM et crée un tableau à partir de celui-ci. Maintenant, je veux coupler ma valeur d'attribut de tableau avec l'élément DOM auquel il appartient et aussi être capable de trouver la partie spécifiée du texte qui correspond à l'élément de tableau (attribut) et à l'élément DOM.Recherche d'un élément DOM avec une partie de l'attribut avec vanilla Javascript

var getAll = document.getElementsByTagName('*'); 
var myArray = []; 

for (var i=0; i<getAll.length; i++) { 
    getHref = getAll[i].getAttribute('href'); 
    if (getHref !== null) { 
    myArray.push(getHref); 
    } 
} 

Je n'ai aucune idée comment lier mes attributs avec les éléments DOM. J'ai essayé d'utiliser indexOf ('') pour trouver une partie du texte mais cela ne fonctionne pas car il recherche des chaînes complètes dans le tableau. Quelqu'un serait-il si gentil et m'aiderait-il? Je ne veux pas utiliser de frameworks.

Répondre

0

Maintenant, je veux associer ma valeur d'attribut de tableau avec l'élément DOM qu'il appartient et aussi être en mesure de trouver une partie de texte spécifique qui correspond à l'élément de tableau (attribut) et l'élément DOM.

Pourquoi ne pas simplement obtenir uniquement les éléments qui appariements en utilisant le contient sélecteur

var getAll = document.querySelectorAll("[href*='text-to-be-matched']"); 

Ceci est un NodeList que vous pouvez itérer avec pour boucle et indexer les éléments DOM avec ce que vous avoir trouvé.

var attributeValToDOMMap = {}; 
getAll.forEach(function(element){ 
    var hrefVal = element.getAttribute("href"); 
    attributeValToDOMMap[ hrefVal ] = attributeValToDOMMap[ hrefVal ] || []; //in case one href value is common with multiple DOM elements 
    attributeValToDOMMap[ hrefVal ].push(element); 
}); 
+0

Ceci est génial. Merci beaucoup! – panxpiotr

0

Vous souhaitez filtrer un attribut href par du texte?

Vous pouvez utiliser .indexOf(), je ne vois pas pourquoi.

Ou vous pouvez améliorer votre sélecteur au démarrage (mais cela a déjà été suggéré).

Voici le violon montrant 1 ligne de code ajoutée à la vôtre afin de filtrer sur une sous-chaîne apparaissant dans href.

fiddle