从jQuery移植到Zepto时,不是有效的选择器错误

时间:2014-04-17 15:22:29

标签: javascript jquery jquery-selectors zepto selectors-api

我试图在jQuery的vex.js插件中使用Zepto。

 ".vex:not(".vex-closing") .vex-content"

我在执行上面的选择器时遇到错误。

 error performing selector: ".vex:not(".vex-closing") .vex-content" zepto.min.js:3
 Uncaught SyntaxError: Failed to execute 'querySelectorAll' on 'Document': '.vex:not(".vex-closing") .vex-content' is not a valid selector. 

如何解决此问题。

以下是从vex.js

中提取的代码
 getAllVexes: function() { 
    return $("." + vex.baseClassNames.vex + ":not(\"." + vex.baseClassNames.closing + "\") ." + vex.baseClassNames.content);
 }

1 个答案:

答案 0 :(得分:2)

:not()选择器通常不允许引用,因为它接受选择器而不是字符串。无论出于何种原因,quotes are allowed in jQuery/Sizzle's implementation of :not()

您应该从选择器字符串中删除\"标记,以使其在document.querySelectorAll()中工作(Zepto似乎直接调用,并专门用于选择器匹配 - 如果我错了,请纠正我) :

return $("." + vex.baseClassNames.vex + ":not(." + vex.baseClassNames.closing + ") ." + vex.baseClassNames.content);

这将产生一个像.vex:not(.vex-closing) .vex-content这样的选择器,它是一个有效的CSS选择器。