2010-06-17 2 views
0

J'ai une fonction jquery (Ce n'est pas écrit par moi quand même j'apprends). En ce que nous remplaçons urls en utilisant f.attr ("href") dans plusieurs endroits. Je ne comprends pas d'où cette valeur href sera liée. Et pourquoi la valeur (f.attr ("href")) est en train de changer de lieu. Je veux dire que c'est avoir un peu de valeur @ un endroit et si je donne la même chose il me donne une valeur différente à l'autre endroit.jquery atrr ("href") n'est pas cohérent .. dans sharepoint

Je lis dans l'article que la méthode .attr() obtient la valeur d'attribut uniquement pour le premier élément du set..What adapté est l'ensemble apparié signifie

Permettez-moi ma question modifie comme ceci: Puis-je ajouter une chaîne de requête dans la fonction Jquery? Je souhaite ajouter deux éléments de chaîne de requête supplémentaires à partir de la page Web pour obtenir l'URL complète. Si nous pouvons .. Comment pouvons-nous accomplir cela?


.replace ("$ {} MY_EMAIL", « mailto: [email protected] subject = Thanku & corps = Jquery travaillant% 0A% 0ahttp. //www.my.site.com/ _layouts/products/New.aspx? url = "+ f.attr (" href ")) Dans ce f.attr (" href ") me donne une valeur différente que d'autres où nous avons utilisé..Basiquement, il me donne la moitié du seul lien ..

y at-il quelque chose que vous avez besoin, je peux vous fournir Merci u

Répondre

2

Lorsque vous utilisez un sélecteur dans un appel jQuery peut correspondre plus il d'un élément. Les résultats sont renvoyés sous la forme d'un objet jQuery, qui peut contenir une collection (tableau) d'objets correspondants. Certaines méthodes, comme attr ne fonctionnent que sur le premier élément de la collection.

Par exemple,

$('a') 

correspond à tous les balises d'ancrage dans votre document.

Maintenant, chacun d'entre eux aura un attribut href, mais si vous appliquez la fonction attr aux résultats de ce sélecteur, il fonctionnera uniquement sur le premier élément de la collection. Si j'ai le HTML suivant.

<a href='#0'>Zero</a> 
<a href='#1'>One</a> 

et utiliser

var href = $('a').attr('href'); 

la variable href aura #0 que sa valeur en dépit du fait que le sélecteur correspond à la fois des points d'ancrage.

Faire un peu plus confus, il est généralement que la version de la méthode qui attribue des valeurs, plutôt que de lire des valeurs, fonctionnera sur tous les éléments de la collection. Par exemple,

$('a').attr('title','foo'); 

assignera foo à l'attribut title des deux points d'ancrage dans la collection. Il est important de comprendre les différences dans la façon dont les différentes méthodes fonctionnent. Voir le jQuery API pour plus de détails sur des méthodes spécifiques. Dans votre cas, je soupçonne que f est une variable qui correspond à différents sélecteurs dans différents endroits du code (f est un nom de variable moche, btw, le rendant plus verbeux aiderait probablement à comprendre ce que fait le code). Cela expliquerait pourquoi il a des valeurs différentes pour l'attribut href dans différents emplacements. Bien sûr, les valeurs pourraient également changer précisément parce que vous les définissez, mais j'espère que vous auriez compris si cela se produisait.

+0

Je crains de poursuivre ce fil. Je peux expliquer le scénario autant que possible. J'ai un pop-up dans une page Web et il porte des attributs de chaîne de requête. Et cette fenêtre a quelques boutons comme l'impression et l'email. quand j'ai donné f.attr ("href"), il prend tous les paramètres de la chaîne de requête. Et je donne le même f.attr ("href") dans le corps de l'email. Cette fois, le lien prend seulement un paramètre querystring. Y at-il quelque chose que je donne dans le corps de l'email? Cependant, je ne vois pas plusieurs valeurs href dans mon code. Avez-vous des idées à ce sujet. Merci beaucoup pour votre réponse – alienavatar

+0

@alienavatar - vous allez avoir besoin de montrer quelques exemples de code de chaque si vous voulez quelque chose de spécifique. 'f' est probablement une variable qui correspond à un sélecteur, mais nous ne savons pas quoi ou comment. Ajoutez les extraits de javascript pertinents (et complets) à votre question + le code HTML si nécessaire. S'il vous plaît ne l'ajoutez pas comme une réponse - il suffit de modifier votre question et l'ajouter en bas, marqué comme une modification à la question. Ajoutez un commentaire à chaque réponse pour nous informer lorsque vous avez mis à jour la question. – tvanfosson

+0

J'ai édité ma question. Pouvez-vous le regarder et partager vos pensées? – alienavatar

2

Si vous avez plusieurs balises d'ancrage sur la page, vous tenez la chance de choisir plus d'un d'entre eux.

<a href="#">Missed</a> 
<div> 
    <a href="#">Anchor</a> 
    <a href="#">Anchor</a> 
    <a href="#">Anchor</a> 
    <a href="#">Anchor</a> 
    <span><a href="#">Missed</a></span> 
</div> 

Si vous avez $('div > a') que votre sélecteur jQuery, vous correspondre (dans cet exemple) toutes les balises d'ancrage dont le contenu est « Anchor »; car ce sélecteur ne correspond qu'aux tags d'ancre qui sont des enfants de divs.

Vous pouvez voir combien d'éléments sont votre appareillés défini en appelant alert(f.length);

Si vous pouvez fournir le code qui définit f, ou voir le HTML dans votre page, nous serons en mesure de vous aider plus Plus précisément!

Si vous définissez une valeur à l'aide f.attr(), tous éléments adaptés seront mis à jour. Si vous obtenez une valeur en utilisant f.attr(), seule la valeur du premier élément sera retournée.

+0

.replace ("$ {} MY_EMAIL", « mailto: [email protected] subject = Thanku & body = Jquery travail% 0A% 0ahttp. //www.my.site.com/_layouts/products/New .aspx? url = » + f.attr (« href »)) Dans ce f.attr le (« href ») me donne la valeur différente que d'autres où nous used..Basically il me donne la moitié du seul lien .. y at-il chose que vous avez besoin, je peux vous fournir Merci u – alienavatar

2

Un ensemble identifié est zéro ou plus des éléments qui sont le résultat de la requête initiale, par exemple $('.foo') renverra un ensemble avec tous les éléments qui a la classe foo définie. Lorsque vous appelez .attr('href') sur cet ensemble, il retournera uniquement l'attribut pour le premier élément de l'ensemble, le cas échéant, comme renvoyer tous les attributs dans un tableau ou concaténer n'est pas ce que la plupart des gens veulent habituellement.

Si vous voulez vraiment tous les attributs, vous pouvez le faire comme suit:

var array_of_hrefs = $('.foo').each(function(){ 
    return $(this).attr('href') 
}).get();