2009-07-20 8 views
1

C'est une sorte de chose aléatoire dont j'ai besoin. Fondamentalement, ma configuration est quelque chose comme ceci:javery jquery saisissant des attributs imbriqués

<div class="classname"> 
    <h3> 
    <a class="anchor_classname" title="some_title">..</a> 
    </h3> 
</div> 

Le segment html ci-dessus est répété sur la page pour tous les enregistrements existants. Ce que je dois faire est ceci: en utilisant Jquery, je veux attraper le texte d'info-bulle de l'ancre imbriquée (c'est-à-dire "some_title") et mettre ce texte à l'attribut "title" de la div contenant. J'ai besoin que ceci soit fait pour tous les enregistrements où chaque texte de titre est unique. Est-ce possible avec la configuration que j'ai montrée ou aurais-je besoin d'identifiants uniques pour distinguer les enregistrements? Quelqu'un pourrait-il décrire comment accomplir cela avec jquery? Merci.

Mise à jour: en utilisant la suggestion de David j'ai réussi à utiliser son code et modifier légèrement comme suit:

$('a.anchor_classname').each(function() { 
     var title = $(this).attr("title"); //line 1 
     var div = this.parentNode.parentNode; //line 2 
     div.title = title; //line 3 
    }) 

Comment puis-je convertir la ligne 2 et 3 à utiliser strictement les fonctions jquery comme parent() et attr() . (Cela fonctionne comme il est mais je suppose qu'il serait préférable d'utiliser les fonctions standard de jquery pour la conformité).

Répondre

2

Duplication informations de cette façon me semble quelque chose qui est susceptible de nuire à l'accessibilité (ou au moins irritant pour les utilisateurs de lecteurs d'écran), et en fournissant des effets mieux réalisé par le style le lien pour remplir le h3 et le h3 pour remplir le div.

Cela dit, ce code non testé fera probablement le travail:

jQuery('div.classname > h3 > a.anchor_classname').each(function() { 
    var title = this.title; 
    var div = this.parentNode.parentNode; 
    div.title = title; 
}) 

Ou plus lent, moins efficace, jQuery-où-native-DOM-serait-faire approche:

jQuery('div.classname > h3 > a.anchor_classname').each(function() { 
    var jq = jQuery(this); 
    var title = jq.attr('title'); 
    var div = jq.parent().parent(); 
    div.attr('title', title); 
}) 
+0

Merci cela a fonctionné. Est-il possible de convertir ceci avec les fonctions jquery standard comme parent() et attr()? J'ai réussi à changer la première ligne à: var title = $ (this) .attr ("title"); et ça a marché. Mais je n'ai pas réussi à changer les deux derniers. – oym

+0

haha..aime le sarcasme. Merci pour votre aide .. Je peux finir par rester avec l'approche DOM-rapide, sauf si quelqu'un peut me convaincre du contraire. – oym

Questions connexes