jq的选择器流程分析开篇

本文剖析了jQuery 1.3版本中选择器的实现原理,详细介绍了如何通过字符串参数初始化jQuery对象,并展示了不同情况下的选择器匹配流程。

本文简单地分析以下jquery的选择器流程

 

为了考量jq的版本优化,这篇的代码分析来自jq1.3

 

 

/*
 * @param selector 
 * @param context
 * @info $的入口
*/
var jQuery = window.jQuery = window.$ = function(selector,context){
       return new jQuery.fn.init(selector,context);
}

 

 

var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/;

jQuery.fn = jQuery.prototype = {
       /*
        * @name init
        * @param selector
        * @param context
       */
       init:function(selector,context){
             //默认是document
             selector = selector || document;
             
             //selector为DOM Element
             if(selector.nodeType){
                   this[0] = selector;
                   this.length = 1;
                   this.context = selector;
                   return this;
             }


             //selector为string
             if(typeof selector === "string"){
                   //比如#test 返回的match为["#test",undefined,undefined,"test"];
                  //比如<div id="test">test</div>返回的match为:['<div id="test">test</div>','<div id="test">test</div>','v',undefined];
                   var match = quickExpr.exec(selector);

                   if(match && (match[1] || !context)){

                         if(match[1]){
                              selector = jQuery.clean([match[1]],context);

                         }else{

                              //$("#ID")
                              var elem = document.getElementById(match[3]);
                              if(elem){
                                     if(elem.id != match [3]){
                                           return jQuery().find(selector);
                                     }

                                     var ret = jQuery(elem);
                                     ret.context = document;
                                     ret.selector = selector;
                                     return ret;

                              }
                              selector = [];
                         
                         }


                   }else{

                          //$(expr,[context])  ===>  $(content).find(expr)
                          return jQuery(context).find(selector); 
                   }                   

             }else if(jQuery.isFunction(selector)){

                   //很多简写的方式:$(function(){});
                    return jQuery(document).ready(selector); 
             }


             if(seletor.selector && selector.context){
                    this.selector = selector.selector;
                    this.context = selector.context;
             }

              return this.setArray(jQuery.makeArray(selector));
    
       }

}
 
 
 

 

 

 

 

### 使用 `jq` 处理 JSON 的选择器语法 `jq` 是一种轻量级且灵活的命令行 JSON 处理工具。通过使用路径表达式和过滤器,可以方便地解析、提取以及转换 JSON 数据。 #### 基本选择器语法 - **访问对象字段** 可以通过点号`.`加上键名来获取JSON对象中的特定字段值: ```bash jq '.keyName' file.json ``` 如果要处理来自标准输入的数据,则可以直接写成如下形式[^1]: ```bash echo '{"name": "Domoticz"}' | jq '.name' ``` - **数组索引访问** 数组元素可以通过方括号`[]`指定下标的方式取出: ```bash jq '.array[0]' file.json ``` - **多层嵌套结构** 对于复杂的多层次嵌套结构,只需连续使用上述两种方式即可到达目标位置: ```bash jq '.outer.inner.most.deeply.nested.value' file.json ``` - **条件筛选** 利用内置函数如`select()`可以根据给定条件选取符合条件的对象或数组项: ```bash jq '.items[] | select(.status == "active")' file.json ``` - **组合多个查询** 当需要同时执行多项操作时,可以用逗号`,`分隔各个独立部分,在最后加到一起形成复合语句: ```bash jq '{id: .id, name: .metadata.name}' file.json ``` 对于Kubernetes场景下的应用实例,比如从Pod资源描述中抽取节点名称,可采用jsonpath类似的简洁表示法配合`jq`实现相同效果[^2] : ```bash kubectl get pod tigers-reunite -o json | jq -r '.spec.nodeName' ``` 这里展示了如何利用`jq`强大的选择器功能高效完成各种JSON数据的操作需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值