jQuery 选择器:ID 以?

Posted

技术标签:

【中文标题】jQuery 选择器:ID 以?【英文标题】:jQuery Selector: Id Ends With? 【发布时间】:2010-10-11 04:44:16 【问题描述】:

是否有 selector 可以查询 ID 以给定字符串结尾的元素?

假设我有一个 id 为 ctl00$ContentBody$txtTitle 的元素。我怎样才能通过只传递txtTitle 得到这个?

【问题讨论】:

好旧的母版页 ID 修改! 从 ASP.Net 4.0 开始设置 ClientIDMode=static 并摆脱这个:) ClientIDMode=static 不适用于那些试图在中继器中查找元素的人! 【参考方案1】:

如果您知道元素类型,那么:(例如:将“元素”替换为“div”)

$("element[id$='txtTitle']")

如果你不知道元素类型:

$("[id$='txtTitle']")

More information available


// the old way, needs exact ID: document.getElementById("hi").value = "kk";
$(function() 
  $("[id$='txtTitle']").val("zz");
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="ctl_blabla_txtTitle" type="text" />

【讨论】:

我会寻找以“$txtTitle”结尾的。使用“txt”前缀风险不大,但如果选择器是“NameTextBox”,它将匹配“NameTextBox”、“FirstNameTextBox”、“LastNameTextBox”等。 一位匿名用户刚刚尝试编辑以下内容。将其添加为评论(似乎很有意义):这不会给出以 id txtTitle 结尾的元素。这是文档:api.jquery.com/element-selector ..element 选择器等同于 getElementsByTagName。它与元素的 id 无关。如果要访问以 id 结尾的元素,请使用此语法 $("[id$='txtTitle']") 或者如果您知道元素的类型 ..e.g. div ..然后使用这个语法 $("div[id$='txtTitle']") 链接非常有用。不是它自己的页面,而是我需要的另外 2 个页面。我学会了如何捕获标题的片段,例如如果 ID 在查看源代码中显示为“masterPage1_Control0_MyTableName_moreStuff”,我可以使用 $("id* =我的表]”)。想想看,我更喜欢 id$。嗯... 这会找到元素document.getElementById("f:fTest:j_idt51:0:inpTest")。这不是$("[id$='inpTest']")。是不是因为ID中不允许冒号(但是JSF加了!)? 有没有办法在 CSS 中使用这个选择器,比如伪选择器?【参考方案2】:

试试

$("element[id$='txtTitle']");

编辑:晚了 4 秒:P

【讨论】:

【参考方案3】:
$('element[id$=txtTitle]')

引用您要匹配的文本片段并不是绝对必要的

【讨论】:

这应该是正确的答案!使用 " 和 ' 只会令人困惑。【参考方案4】:

将下划线或 $ 添加到您要搜索的字词中更安全,因此不太可能匹配以相同 ID 结尾的其他元素:

$("element[id$=_txtTitle]")

(其中 element 是您要查找的元素类型 - 例如 divinput 等。

(注意,您是在暗示您的 ID 中往往带有 $ 符号,但我认为 .NET 2 现在倾向于在 ID 中使用下划线,因此我的示例使用下划线)。

【讨论】:

是的,你是对的。 ID 属性使用下划线。名称属性使用美元符号。【参考方案5】:

一个例子: 选择 ID 以 _edit 结尾的所有&lt;a&gt;s:

jQuery("a[id$=_edit]")

jQuery("a[id$='_edit']")

【讨论】:

【参考方案6】:

问题的答案是$("[id$='txtTitle']")、as Mark Hurd answered,但是对于像我一样想要查找所有具有给定字符串开头的 id 的元素(例如txtTitle),试试这个(doc):

$("[id^='txtTitle']")

如果您想选择 id 包含给定字符串 (doc) 的元素:

$("[id*='txtTitle']")

如果您想选择 id 不是给定字符串 (doc) 的元素:

$("[id!='myValue']")

(也匹配没有指定属性的元素)

如果您想选择 id 包含给定单词的元素,以空格分隔 (doc):

$("[id~='myValue']")

如果您想选择 id 等于给定字符串或以该字符串开头后跟连字符 (doc) 的元素:

$("[id|='myValue']")

【讨论】:

如果您添加实际回答问题的那个,即 $("[id$='txtTitle']") 并将其放在列表的第一位,我会投票给您的答案。我现在不能,因为你没有回答这个问题 @AlanMacdonald 我不确定添加它是否正确。我在一个答案被接受后很久才回答这个问题,只是为了给访问者添加更多信息。我希望支持我的答案的人也支持这个问题的答案。 @RomainGuidoux 很公平,这是你的电话,但我不赞成那些不能解决所问问题的答案,因为对于遇到与 OP 相同问题的新手来说,如果他们来了,这并不明显到页面,有一个投票的答案甚至没有回答这个问题。如果你改变它来回答这个问题,我会赞成你的答案而不是接受的答案,因为它是一个更完整和更有用的答案。或者它应该是对已接受答案的评论,而不是对问题的答案。 @AlanMacdonald Done,你说服了我。【参考方案7】:

为了在包含许多 iframe 的页面中找到以“iFrame”结尾的 iframe id。

jQuery(document).ready(function ()     
                  jQuery("iframe").each(function()                     
                    if( jQuery(this).attr('id').match(/_iFrame/) ) 
                            alert(jQuery(this).attr('id'));

                                        
                  );     
         );

【讨论】:

【参考方案8】:

试试这个:

<asp:HiddenField ID="0858674_h" Value="0" runat="server" />

var test = $(this).find('[id*="_h"').val();

【讨论】:

【参考方案9】:

由于这是 ASP.NET,您可以简单地使用 ASP 标签打印生成的 txtTitle 的 ClientID:

$('<%= txtTitle.ClientID %>')

这将导致...

$('ctl00$ContentBody$txtTitle')

...当页面被渲染时。

注意:在 Visual Studio 中,Intellisense 会因为您在 javascript 中放置 ASP 标签而大喊大叫。您可以忽略它,因为结果是有效的 JavaScript。

【讨论】:

OP 没有'ctl00$ContentBody$txtTitle',他有'txtTitle'并且你缺少前导# 来匹配一个id。但是 OP 已经拒绝了一个类似的建议(自删除以来): 除非我将我的 Javascript 直接放在标记中,否则这将不起作用,这是组织的噩梦。行为分离对这个项目至关重要。

以上是关于jQuery 选择器:ID 以?的主要内容,如果未能解决你的问题,请参考以下文章

锋利的jQuery学习笔记之jQuery选择器

使用 vanilla JS 而不是 JQuery $ 选择器按 id 选择 div 以应用 Raphaeljs 方法

jQuery或CSS选择器选择以某个字符串开头的所有ID [重复]

jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结

jquery 选择器

jQuery基础学习01 jQuery选择器