Jump To …

extend_rule.js

var time = +new Date

在进行语法扩展时reg是必须的, action与filter至少需要需要二选其一(根据场景不同)才能完成一个自定义规则的实施, 否则虽然不会报错 但是只是匹配了,让解析器不报错,但是这个选择器什么都不会做

nes.parser.on("range",{
  reg:/\s*\{\s*(\d*),(\-?\d*)\s*\}\s*/, 

action中需要注意两个部分一个是this.error()打印出解析错误信息, 一个this.current()永远返回当前的Simple Selector对应的data部分这是个hash表, 你往里放key value对就行

  action:function(all, a, b){
    var current = this.current(), //1. this.current返回当前匹配的simple selector
      pesudos = current.pesudos || (current.pesudos = []) 
    if(!a && !b) this.error("range中的参数不能同时为空") //2. this.error
    a = a && parseInt(a) || 1
    b = b && parseInt(b) || 0
    pesudos.push({  //a 如果不存在 视为
      name:"nth-child",
      param:{start:a, step:1 }
    })
    if(b>0){
      pesudos.push({ //意思小于b
        name:"not",
        param:":nth-child(" + (b+1) + ")"
      })
    }else{
      pesudos.push({  
        name:"nth-last-child",
        param:{start:b?-b:1, step:1 }
      })
    }
  }
})

你也可以不写action.什么意思呢,就是我们可以很方边的去添加我们想要的选择器, 以后可能可以实现

nes.parser.on("pesudoElement",{
  reg: /::(\w+)/,
  action:function(all, name){
    this.current().pesudoElement = name
  },
  filter:function(node, args){

我们随机返回是否通过

    return Math.random()>0.5
  }
})

你也两个都写