2010-11-22 75 views
4

我有DOM元素,其ID可能包含'/'。 我想用下面甲,因为我需要具有ID 防爆的所有元素:搜索'id'其中包含'/'+ jquery

jQuery('[id=activities/_terp_count]') //returns null 

需要注意的是,

jQuery('#activities/_terp_count') //returns null 
+5

ID属性不能包含正斜杠。这并不奇怪,jQuery很难找到这样的元素。也就是说,可能仍然有一种方法可以获取具有该ID的元素。另外,“具有该ID的所有元素”请注意,您应该只有一个这样的元素。 – BoltClock 2010-11-22 07:15:40

+3

'id'“必须以字母([A-Za-z])开头,后面跟着任意数量的字母,数字([0-9]),连字符(” - “),下划线(”_“ “),冒号(”:“)和句号(”。“)。”。 '/'是一个无效的字符。 – kennytm 2010-11-22 07:15:57

+1

请参考:http://stackoverflow.com/questions/70579/what-is-a-valid-value-for-id-attributes-in-html – Kevin 2010-11-22 07:16:39

回答

4

jQuery('[id=activities/_terp_count]')确实应该找到它(例如 - http://jsfiddle.net/jXsvA/),虽然它的比ID直接搜索要慢。如果你能以某种方式限制选择器,它会更快,比如jQuery('div[id*=activities/_terp_count]'),如果你知道标签总是<div>的例子。

+0

您的解决方案对我有帮助,但在里面('id'周围)引用:'jQuery('[id =“activities/_terp_count”]')'。没有它,我得到了'语法错误,无法识别的表达...'。 – 2016-12-20 10:38:05

4

,如果你逃跑的迹象/您可以使用正常的ID选择 - jQuery的requires that for special characters(虽然,/不具有的jQuery或CSS一个空间的意义,因为据我所知)

$('#activities\\/_terp_count') 
7

的上面的解决方案适用于我,但值得注意的是,通过id获取元素的本地方法有以下优势:即document.getElementById('strin/g')在jQuery(“strin/g” “)会失败(因为jQuery使用了一个标记解析器,它在”/“上扼杀,没有特殊的处理。)。为了让jQuery的包裹该元素的版本:

jQuery(document.getElementById('activities/_terp_count')); 

事实上,如果你不能总是精确控制是进入实际的ID(比方说,如果你想搜索页面与元素a)注意,因为这可能是危险的,并且b)注意jQuery(document.getElementById(“#”,'''') )));将比jQuery更加可靠地工作(“#”+ window.location.has.replace(“#”,''));因为它不会轻易打破。

例子:

jQuery(document.getElementById("_=_")) //<--- null, or the actual element, if you have one which said crazy, non-compliant id 

jQuery("#_=_") //<--Uncaught Error: Syntax error, unrecognized expression: #_=_ 

如果你不想让你的用户能够仅仅通过进入一个特定的URL参数或哈希来破坏你的代码,避免使用情况下,如果可以的话,如果你不能,请使用本机ID元素。

+1

这是最简单的解决方案,也是最明智的解决方案。为什么打扰[转义](http://learn.jquery。com/using-jquery-core/faq/how-do-i-select-an-element-by-a-id-that-has-characters-used-in-css-notation /)(这总是容易出错在意想不到的情况下),当你可以利用原生JavaScript方法的可重复性。 – thebugfinder 2015-02-11 02:09:24