2009-12-04 3 views
11

Existe-t-il un équivalent JQuery de la fonction $ find() d'ASP.Net Ajax?

$() != $find() 

Répondre

2

Il n'y a pas d'équivalent 1to1 mais ce que vous voulez est $ ('sélecteur')

Vérifiez la docs sur les différents selectors

$find('MyComponent') would be $('#MyComponent') 

$find('MyComponent',div) would be $(div).find('#MyComponent') 
1

Si vous voulez trouver un élément par son ID de code ASP.NET plutôt que l'ID client généré (ctl00_RealId), vous pouvez utiliser cette fonction. Il semble que pour les éléments qui ont une carte d'identité qui se termine par _{the real ID here}:

var $$ = function (id, context) { 
    var $ = (jQuery) ? jQuery : return ; 
    var el = $("#" + id, context); 
     if (el.length < 1) 
     el = $("[id$=_" + id + "]", context); 
    return el; 
} 

Par exemple, supposons que votre ID dans votre code est pnlSuccess, par exemple un panneau:

<asp:Panel ID="pnlSuccess" runat="server"></asp:Panel> 

Mais dans le code rendue sort comme: ctl00_content_ctl00_pnlSuccess

appel $$("pnlSuccess") trouverez ce panneau de rendu.

+0

cela pourrait être très peu fiable dans les situations UserControl où beaucoup de contrôles pourraient se terminer avec le même ID mais avec un préfixe différent –

+0

Dans ce cas, l'utilisation de 'context' aurait plus de sens. –

+2

yup. je le sais. En fait, j'ai utilisé $ ("input [name * = pnlSuccess]) pour trouver le contrôle, ce que je veux réellement, c'est l'objet retourné par find(), il semble que l'objet que find() retourne dans ASP. Net Ajax diffère de l'objet que $() retourne dans Jquery.J'ai certainement remarqué cela lors de l'utilisation de Telerik Controls – pauldomag

1

Je ferais juste ce qui suit, pas de muss, pas d'histoires, droit au but.

$('#' + <%=myControl.ClientID%>) 
+0

Cela suppose que vous êtes sur la page sur laquelle votre code rendu est activé, pas dans un fichier JavaScript externe –

+2

yup i sache que.En fait, j'ai utilisé $ ("input [name * = pnlSuccess]) pour trouver le contrôle, ce que je veux réellement, c'est l'objet que $ find() renvoie, il semble que l'objet que find() retourne dans ASP. Net Ajax diffère de l'objet que $() retourne dans Jquery.Je l'ai certainement remarqué lors de l'utilisation de Telerik Controls – pauldomag

+0

$ find() retourne juste un élément DOM, et $() renvoie un objet jQuery enveloppant un tableau d'éléments DOM Néanmoins, $() est tout aussi utile, probablement plus ... –

8

Il n'y a pas depuis $find renvoie le composant AJAX lié à l'élément DIV, et non l'élément DOM. Vous pouvez créer votre propre plugin qui raccourcit la méthode find.

Microsoft a créé $find pour lier ses composants ASP.NET AJAX au DOM.

+1

vrai usage de '$ find()' –

1

Je sais que c'est un temps LOOOOOOOONG en retard, mais je pense que j'ai le genre de solution que vous recherchez. Si je me trompe, vous cherchez un substitut jQuery $find parce que vous ne connaissez pas l'ID de l'élément (lequel $find n'a pas de sélecteur pour autant que je sache, mais jQuery est génial avec). Je viens de rencontrer ce problème en utilisant des contrôles Telerik sur une page SharePoint, donc mon ID d'objet est un désordre fou depuis longtemps, et puisque Sharepoint 2010 est sur .NET 3.5, je ne peux pas utiliser un ID statique.

La solution est simple, mais elle a creusé mon cerveau pendant un moment. $find() recherche par ID, que heureusement nous pouvons renvoyer comme une chaîne par jQuery: $("elem").attr("id"). Donc, fondamentalement, ce que nous faisons est d'utiliser jQuery à l'intérieur de la fonction $find et cela fonctionne. Voici un exemple de mon projet:

var contextMenu = $find($("[id*=mnuContext]").attr("id")); 

Cela a fonctionné pour moi, et va me aider beaucoup avec le reste de ma solution SharePoint.