如何获取ID中包含括号的表单元素的值?

时间:2012-02-24 04:26:17

标签: javascript jquery

  

可能重复:
  Find DOM element by ID when ID contains square brackets?

我无法获得有点疯狂的表单元素的值。例如,我有一个HTML表单元素,其“必须”具有名称“data[User][notify_one_day_out]”。问题是我无法获得表单元素的值。

<label for="data[User][notify_one_day_out]">One day away:</label>
<select name="slider" id="data[User][notify_one_day_out]" data-role="slider">
    <option value="0">OFF</option>
    <option value="1" selected="selected">ON</option>
</select>

然而

alert( $("#data[User][notify_one_day_out]").val());

出现未定义。有什么帮助吗?

5 个答案:

答案 0 :(得分:3)

\\

转义
$("#data\\[User\\]\\[notify_one_day_out\\]")

答案 1 :(得分:2)

您必须转义括号:jsFiddle

alert( $("#data\\[User\\]\\[notify_one_day_out\\]").val());​

RegExp的一个反斜杠,用于Javascript以逃避反斜杠;)

jQuery使用sizzle作为选择器引擎,它由一些非常高科技的正则表达式提供支持。

编辑 nnnnnn:我不是jQuery内部工作的专家,但遵循源代码中的面包屑确实看起来像RegExps给我

1)jQuery调用$.fn.init(selector)

var jQuery = function( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init( selector, context, rootjQuery );
    }

2)在所有特殊情况发生后,init使用quickExpr.exec( selector )

init: function( selector, context, rootjQuery ) {
        ...
    match = quickExpr.exec( selector );

3)quickExpr似乎进入RegExp的土地,在此之后我不知道另一方出现了什么碎片。

quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/

答案 2 :(得分:1)

$(document.getElementById('data[User][notify_one_day_out]')).val()

答案 3 :(得分:0)

尝试使用\用ecsaping 我确实记得这样的事情

更新

我想我们已经有了Cheery评论的解决方案

find Dom element by I'd containing square brackets

答案 4 :(得分:0)

您可能只有一个名为“slider”的选择,以便您可以使用属性等于选择器$('select[name="slider"]')解决无效ID。