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控件显示的选中值