jquery,在通过 id 找到控件后对其进行处理

Posted

技术标签:

【中文标题】jquery,在通过 id 找到控件后对其进行处理【英文标题】:jquery, work on a control after finding it by id 【发布时间】:2011-08-28 08:59:33 【问题描述】:

我用 jquery 找到了一个所需的控件,如下所示...

控制来源:

<a id="ctl00_ContentPlaceHolder1_rlvImages_ctrl0_ctrl3_lbEdit" class="lbEdit" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$rlvImages$ctrl0$ctrl3$lbEdit','')">ویرایش</a>

jquery 代码:

警报($('a[id$="lbEdit"]'));


我想知道有什么区别

ctl00_ContentPlaceHolder1_rlvImages_ctrl0_ctrl3_lbEdit

ctl00$ContentPlaceHolder1$rlvImages$ctrl0$ctrl3$lbEdit

我怎样才能得到

ctl00$ContentPlaceHolder1$rlvImages$ctrl0$ctrl3$lbEdit

使用 jquery? 意味着我需要检查上限 id 或其他条件,我认为硬编码上 id 不是正确的方法...

【问题讨论】:

@mcgrailm -> 你的意思是什么? 我只是不明白那个 id。我想我应该庆幸我不使用 asp 在我看来 id 应该很简单 @mcgrailm 这是我一直对 ASP.Net Webforms 感到困惑的小问题之一。 MVC 允许您完全控制 html 标记的每个部分,并且是在 IMO 中工作的更好环境。 【参考方案1】:

当它们是runat="server" 时,ASP.Net 使用那些复杂的命名模式来生成 html 元素 id,这使得在页面上通过 id 查找控件变得很困难。

尝试改用控件ClientID 来使用这个带有服务器标签的选择器:

$('#<%=lbEdit.ClientID %>");

【讨论】:

【参考方案2】:

首先,ctl00_ContentPlaceHolder1_rlvImages_ctrl0_ctrl3_lbEdit 是元素的 HTML Id 属性。

ctl00$ContentPlaceHolder1$rlvImages$ctrl0$ctrl3$lbEdit 是元素的内部 ASP.Net 引用。它对网站的前端没有用处。

在您的示例中,要使用 jQuery 选择器获取该元素的文本,您可以使用:

$("#ctl00_ContentPlaceHolder1_rlvImages_ctrl0_ctrl3_lbEdit").text();

还值得注意的是,使用 ASP.Net 网络表单意味着您不能永远依赖该元素的 ID。您必须通过它的类(您可以在 ASP.Net 中可靠地设置)和它的父级来查明该特定元素。

【讨论】:

亲爱的@Rory McCrossan -> 感谢您的回答 - 但 .text() 不返回 ctl00$ContentPlaceHolder1$rlvImages$ctrl0$ctrl3$lbEdit.i 想要一种获取此字符串的方法 -> 输出为那个! 如果你想得到这个值(虽然我无法想象你为什么需要),那么$("#ctl00_ContentPlaceHolder1_rlvImages_ctrl0_ctrl3_lbEdit").attr("href") 会得到它。然后,您需要对其执行正则表达式替换以获取特定的控制值。【参考方案3】:

使用 .NET 4.0 并将您的 ClientIDMode 设置为静态。

http://weblogs.asp.net/asptest/archive/2009/01/06/asp-net-4-0-clientid-overview.aspx

这将使您的 ID 更容易从 JavaScript 中引用。

【讨论】:

【参考方案4】:

我认为您可能想要这样做。 javascript:__doPostBack('','')

【讨论】:

以上是关于jquery,在通过 id 找到控件后对其进行处理的主要内容,如果未能解决你的问题,请参考以下文章

CoreData:错误:从上下文中删除托管对象后对其进行变异

客户端上的jQuery更改ID,并且在服务器上不再可以找到控件?

如何通过jquery 控制dropdownlist控件显示的选中值

如何通过使用 GDI 对其颜色进行异或处理来在填充的矩形上绘制文本?

jquery如何取另外一个页面其中一个控件的值

AngularJS再次加载初始内容后无法在DOM上使用JQuery