JQuery 教程

jQuery 选择器:混淆选择器

 jQuery 中 $.escapeSelector(selector) 这个方法(jQuery 3.0+ 新增),核心是解决选择器中包含特殊字符时的 “混淆” 问题。

为什么会出现 “选择器混淆”?

jQuery 选择器语法基于 CSS 选择器,里面定义了很多特殊字符(比如 #、.、[、]、:、/ 等),这些字符有特殊含义:

  • # 代表 ID 选择器

  • . 代表类选择器

  • [] 代表属性选择器

如果你的 HTML 元素的 ID / 类名 / 属性值中本身包含这些特殊字符(比如 ID 是 user#123、类名是 item.456),直接用常规选择器就会解析错误,导致选择器“混淆”,无法选中目标元素。

$.escapeSelector() 的作用就是:对选择器中的特殊字符进行转义,让 jQuery 把这些字符当作普通字符处理,而不是解析为选择器语法。

$.escapeSelector() 用法

语法:$.escapeSelector(需要转义的字符串)

返回值:转义后的字符串

示例:

// 将 selectorStr 进行转义
let escapedStr = $.escapeSelector(selectorStr);

完整示例:

示例:

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JQeury 教程:选择器</title>
    <!-- 引入 jQuery 库 -->
    <script type="text/javascript" src="https://www.hxstrive.com/cdn/libs/jquery/3.7.1/jquery.min.js"></script>
    <!-- 引入 loglevel 库,方便在 DOM 中打印日志 -->
    <script src="https://www.hxstrive.com/preview_code/libs/custom_loglevel.js"></script>
    <style>
        div { margin:20px; }
        button { background: #EEE !important; border: 1px solid #ccc !important; min-width: 40px; padding: 5px; margin: 5px; cursor: pointer; }
        sup {color: red; font-size: 12px; background: transparent !important;}
        ul li { margin: 3px 0;}
        h3 { font-size: 18px; }

        /* 效果样式 */
        .myClass {
            box-shadow: inset 0 0 5px red;
        }
    </style>
</head>
<body>

    <div class="app">
        <h3>混淆选择器</h3>
        <div class="notMe">&lt;div class=&quot;notMe&quot;&gt;&lt;/div&gt;</div>
        <div class=".box my_Class">&lt;div class=&quot;.box my_Class&quot;&gt;&lt;/div&gt;</div>
        <div class=".box">&lt;div class=&quot;.box&quot;&gt;&lt;/div&gt;</div>
    </div>

    <div>
        <!-- 
        $.escapeSelector(selector) 3.0+
        这个方法通常被用在类选择器或者ID选择器中包含一些CSS特殊字符的时候,这个方法基本上与 CSS 中 CSS.escape() 方法类似,唯一的区别是jquery中的这个方法支持所有浏览器。
        -->
        <button type="button" onclick="
                reset();
                // $.escapeSelector('.box') 对 .box 进行转义,然后添加样式
                $('div').find('.' + $.escapeSelector('.box')).addClass('myClass');
            ">$.escapeSelector</button>
    </div>

    <script>
        function reset() {
            $('*').removeClass('myClass');
        }
    </script>
    
</body>
</html>

看看效果👉自己动手试一试 »

更多关于 jQuery 的知识请阅读后续教程。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号