群里的abcd提出的问题,选择器如何区分这两个东西。说实话,我对此非常迷惑,于是看了几个选择器的实现,总结如下:

[class]要求目标节点显式地设置了class。

[class=""]不但要求目标节点显式地设置class,还要求其值为空字符串。

那剩下的问题是如何得知此属性是被显式地设置了。这简单,这东西我老早就在《tabIndex属性》一文研究过:


var _hasAttr = function(node, name){var attr = node.getAttributeNode && node.getAttributeNode(name);return attr && attr.specified; // Boolean
};

但对于一个选择器来说,过来的函数调用是非常不明显,我们需要努力寻求一些更简捷的替换品。hasAttribute不错,可惜IE6,IE7不支持。我们转向jQuery源码吧,毕竟拥有这些人为它添加砖加瓦。

由于它是属于属性选择器的范畴,因此它与[name=check],[name!=check],[name~=check]等一齐处理。jQuery会把它进行切割,如[name=check]会变成["name","name","=","check"],[name!=check]会变成["name","name","!=","check"],[name]会变成["name","name",,],亦即有两个元素是undefined。第四个值会代入一个叫check的变量,并且再与""相加代入另一个叫value的变量。在那个长长的三目运算符中,它有一个分支专门用于处理像[class]这种是否显示地设置了属性但不管其值是多少的情况:


!check ?  value && result !== false ://当check为undefined,即进入此分支,result为真实属性值

最新文章

  1. 一次谷歌面试趣事(转)
  2. 专为SaaS而生的PaaS平台!
  3. 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)
  4. 音视频技术开发周刊 | 233
  5. Gson之toJson和fromJson方法
  6. linux显示文本文件指定行数的数据
  7. vs 生成get set_TVM代码学习 -- 代码生成流程(一)
  8. 税收和成本计算器php,企业税收计算器
  9. linux rdma测试,硬件RDMA的驱动配置和测试
  10. 【一步一步学习mysql】数据库操作
  11. grub2 引导光盘
  12. java基础8 构造函数和构造代码块
  13. php10天速成培训,十天学会php之第十天
  14. 为什么郭台铭才是夏普的最佳归宿?
  15. 显示器3d测试软件,IPS显示屏/裸眼3D显示原理及3D应用
  16. Python第五周作业之选择题
  17. 图像操作(反差,混合,调整图像亮度与对比度,绘制文字)
  18. selenium录屏python_Selenium实现录屏的一种方法
  19. 深度学习驱动智能搜索引擎,RankBrain革了SEO的命
  20. UE4Lamplight_预结算光照情景

热门文章

  1. 【CVPR2020】【语义编辑】StyleRig:Rigging StyleGAN for 3D Control over Portrait Images
  2. 业务需求复杂多变,IT部门应接不暇?自定义报表来帮您!
  3. app华为市场上架总结
  4. matlab基础编程学习
  5. 常见数据结构——完全二叉树(定义、特征、节点个数的判断以及C++简单实现)
  6. 职场中有哪些不成熟的表现
  7. latex写姓名_用Latex写学术论文:作者(Author)摘要(Abstract)
  8. MAC自带的Java版本以及Java安装目录查看
  9. Openvas的安装调试
  10. MCP2515驱动程序