ASP.Net Ajax $find() Jquery等效方法

11

有没有 JQuery 等效于 ASP.Net Ajax 的 $find() 函数?

$() != $find()
5个回答

8

由于$find返回与DIV元素相关的AJAX组件,而不是DOM元素,因此不存在。您可以构建自己的插件来快捷地使用查找方法。

Microsoft创建了$find作为将其ASP.NET AJAX组件链接到DOM的一种方式。


1
终于有人知道$find()的真正用途了。 - Izzy Rodriguez

2

虽然没有完全相同的方法,但您需要使用$('selector')。

请查看文档中关于不同选择器的介绍。

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

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

2
我会直接做以下操作,不费力,直奔主题。
$('#' + <%=myControl.ClientID%>)

这假设你正在渲染代码所在的页面上,而不是在外部JavaScript文件中。 - Mark Ursino
2
是的,我知道。实际上,我一直在使用$("input[name*=pnlSuccess]")来查找控件。我真正想要的是$find()返回的对象。似乎ASP.Net Ajax中$find()返回的对象与Jquery中$()返回的对象不同。当使用Telerik控件时,我肯定注意到了这一点。 - pauldomag
那是因为$find()只返回一个DOM元素,而$()返回一个包装了一组DOM元素的jQuery对象,尽管如此,$()同样有用,甚至更加实用。 - Ben Lesh
1
实际上,$find()函数不会返回DOM元素。它是$get()函数返回DOM元素... - pauldomag

1
如果您想通过其 ASP.NET 代码 ID 而不是生成的 ClientID(ctl00_RealId)查找元素,则可以使用此函数。它只会查找具有以 _{the real ID here} 结尾的 ID 的元素:
var $$ = function (id, context) {
    var $ = (jQuery) ? jQuery : return ;
    var el = $("#" + id, context);
      if (el.length < 1)
        el = $("[id$=_" + id + "]", context);
    return el;
}

例如,假设您代码中的ID为pnlSuccess,表示一个面板:
<asp:Panel ID="pnlSuccess" runat="server"></asp:Panel>

但在渲染的代码中,它会显示为:ctl00_content_ctl00_pnlSuccess

调用$$("pnlSuccess")将找到该渲染面板。


在用户控件的情况下,这可能非常不可靠,因为许多控件可能以相同的ID结尾,但具有不同的前缀。 - Marek Karbarz
在这种情况下,使用context会更合理。 - Mark Ursino
2
是的,我知道。实际上,我一直在使用$("input[name*=pnlSuccess]")来查找控件。我真正想要的是$find()返回的对象。似乎ASP.Net Ajax中$find()返回的对象与Jquery中$()返回的对象不同。当我使用Telerik Controls时,我确实注意到了这一点。 - pauldomag

1

我知道这个问题已经拖了很久,但我认为我有你正在寻找的解决方案。如果我没错的话,你正在寻找一个$find jQuery替代品,因为你不知道元素的ID(据我所知,$find没有选择器,但是jQuery非常棒)。我刚在SharePoint页面上使用Telerik控件时遇到了这个问题,所以我的对象ID是一些长而疯狂的东西,而且由于Sharepoint 2010是.NET 3.5,我不能使用静态ID。

解决方案很简单,但让我费了好一会儿脑子。 $find()正在通过ID搜索,幸运的是我们可以通过jQuery返回它作为字符串:$("elem").attr("id")。所以基本上我们在$find函数内部使用jQuery,它就能工作了。以下是我的项目示例:

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

这对我很有帮助,将会在我的SharePoint解决方案中大有裨益。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接