为啥 jQuery 选择器适用于 Chrome,但不适用于 Safari?

Posted

技术标签:

【中文标题】为啥 jQuery 选择器适用于 Chrome,但不适用于 Safari?【英文标题】:Why jQuery selector works on Chrome but not on Safari?为什么 jQuery 选择器适用于 Chrome,但不适用于 Safari? 【发布时间】:2018-03-11 20:36:42 【问题描述】:

我有以下代码:

var l = $("input[name*=hello").length;
$('#result').text(l);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <input name="hello" type="text">
</div>
<div>
  <input name="hello" type="text">
</div>
<div id="result">
  
</div>

jQuery 选择器在哪里:

input[name*=hello

检查选择器没有正确写入input[name*=hello,因为缺少]

在 Chrome 上,我可以在 div[id=result] 上看到我输入的名称为“hello”(2) 的数量。

但在 Safari 上,我在控制台上收到错误:

哪个是正确的,所以问题是:为什么 Chrome 会“自动更正”选择器?是否可以消除这种行为?

【问题讨论】:

这也适用于 Firefox,即使是 document.querySelectorAll developer.mozilla.org/en-US/docs/Web/javascript/Reference/… 也许,在他们后来的版本中,他们非常复杂,他们自己修复了选择器。与今天几乎所有浏览器修复损坏的 html 相同:&lt;div&gt; &lt;h1&gt; &lt;/div&gt; 已修复。 '使用严格';对结果没有影响。 【参考方案1】:

如果选择器不包含任何 jQuery 扩展,jQuery 将使用浏览器内置的document.querySelectorAll() 函数。 When the selector is invalid, the behavior is unspecified, so it may differ between browsers.一些浏览器试图“修复”选择器并返回一些有用的东西,而其他浏览器则发出错误信号。你不应该依赖这个——编写正确的选择器。

【讨论】:

以上是关于为啥 jQuery 选择器适用于 Chrome,但不适用于 Safari?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 CSS 不适用于 Android 上的 Chrome,但适用于其他任何地方?

Jquery $.Post 适用于 Firefox 但不适用于 Chrome

此 JS/jQuery 代码适用于 Firefox,但不适用于 Chrome

为啥 jQuery UI 的日期选择器会与动态 DOM 发生冲突?

jQuery背景按钮动画适用于Chrome和IE8,但不适用于Firefox或IE9 [重复]

日期选择器 html5 标记不适用于 Mozilla、IE 浏览器。但它仅适用于 Chrome