jquery 名称中包含 space 的参考 ID

jquery reference ID with space in name

我正在使用带有 jquery 多 select 扩展名的 jquery。

对于我的 html 语法:

<select multiple="multiple"  id="test">
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
</select>

然后我得到 multi-select 的值:

  $(function() {

        $('#test').change(function() {
            console.log($(this).val());
        }).multipleSelect({
            width: '100%'
        });
    });

这 100% 有效。

我的问题是,当 ID 中有 space 时,我该如何让它工作。我知道在 ID 或名称中使用 space 并不理想,但这是目前的情况,我需要从带有 space 的 ID 中获取多个 select 选项。 例如:

<select multiple="multiple"  id="test two">
    <option value=1>1</option>
    <option value=2>2</option>
    <option value=3>3</option>
    </select>

$(function() {

            $('#test two').change(function() {
                console.log($(this).val());
            }).multipleSelect({
                width: '100%'
            });
        });

这失败了,里面有 space。

我已经尝试了如下几个选项,但都没有成功。

任何建议都非常感谢。

$(function() {

$("#test two").change(function() {
                    console.log($(this).val());
                }).multipleSelect({
                    width: '100%'
                });
            });

Space 不是 HTML4 和 HTML5 中 ID 属性中的有效字符。顺便说一句,您可以使用属性选择器:

$("[id='test two']").change( ... );

像这样

$("select[id='test two']").change(function() {
    console.log($(this).val());
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select multiple="multiple"  id="test two">
    <option value=1>1</option>
    <option value=2>2</option>
    <option value=3>3</option>
</select>

可以(在 ID 中使用 space)但最好不要将 id 与 space 一起使用,将 _ 添加到您的选择器中,例如 [=13] =]

jQuery 文档在 Selectors 上有一个综合页面。您会找到所有可用于基于属性(id 是)查询的选择器,但它也有这条建议:

To use any of the meta-characters ( such as !"#$%&'()*+,./:;<=>?@[\]^`{|}~ ) as a literal part of a name, it must be escaped with with two backslashes: \. For example, an element with id="foo.bar", can use the selector $("#foo\.bar").

所以你有两个选择:

$('#test\ two')

$('[id="test two"]')

综上所述,HTML spec 不允许在元素的 id 属性中使用空格。浏览器可能仍会按照您的预期呈现页面,但如果可以避免的话,您真的不应该这样做;如果只是因为它使事情变得比它们需要的复杂得多,正如您所发现的那样。

The value must be unique amongst all the IDs in the element's home subtree and must contain at least one character. The value must not contain any space characters.

您可以像这样使用属性选择器:

$("[id='test two']").change(function{
    // Logic here...
});

或者,您可以将 id 更改为 class...

当您 select 元素按 id 属性时,不要使用 spaces,因为 space 字符对于 ID 无效 attribute.why 不符合约定?。

ID tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters, digits ([0-9]), hyphens ("-"), underscores ("_"), colons (":"), and periods (".").

如果您不关心任何类型的约定,那么 select 就像其他答案所建议的那样。

$("select[id='test two']").change(function() {
    console.log($(this).val());
});

@courtesy亚历山大