这个Jquery表达式有什么问题

时间:2014-11-19 05:49:32

标签: javascript jquery

自从我将项目从JQuery 1.7.1升级到1.11.0后,我在我之前的一个js中遇到了这个错误

我得到的错误是

  

未捕获错误:语法错误,无法识别的表达式:.formsetFormField:not(.treeLevel):not([name $ = - TOTAL_FORMS]):not([name $ = - INITIAL_FORMS]):not([name $ = - MAX_NUM_FORMS]),输入[type = checkbox] [name $ = - DELETE],输入[type = hidden] [name $ = - slide],输入[type = file]

我的代码是这样的

if (typeof opts.getAllInputs === "undefined") {
                node._getAllInputs = function(withManagementForm) {
                    withManagementForm = (typeof withManagementForm === "undefined") ? withManagementForm : false;
                    if (withManagementForm) {
                        return $(this).find("> .nestedFormsetsFieldsSection > li > input:not(.treeLevel), > .nestedFormsetsFieldsSection > li > textarea");
                    } else {
                        return $(this).find("> .nestedFormsetsFieldsSection > li > input:not(.treeLevel):not([name$=-TOTAL_FORMS]):not([name$=-INITIAL_FORMS]):not([name$=-MAX_NUM_FORMS]), > .nestedFormsetsFieldsSection > li > textarea");
                    }
                };
            } else {
                node._getAllInputs = opts.getAllInputs;
}

我尝试过很多方法 1.修复此表达式 2.尝试使用多个版本的Jquery。我制作了1.7.1的对象并使用了以下方法

<script type="text/javascript">
var jQuery_1_7_1 = $.noConflict(true);
</script>

但我最终得到了更多错误。

我看到的唯一解决方案是,根据Jquery 1.11.0

,有人可以帮我修复这个表达式

4 个答案:

答案 0 :(得分:1)

因为这段代码似乎是错误的:

  

未捕获错误:语法错误,无法识别的表达式:.formsetFormField:not(.treeLevel):not([name $ = - TOTAL_FORMS]):not([name $ = - INITIAL_FORMS]):not([name $ = - MAX_NUM_FORMS]),输入[type = checkbox] [name $ = - DELETE],输入[type = hidden] [name $ = - slide],输入[type = file]

所以你可以试试这个:

$(this).find('.formsetFormField:not(.treeLevel):not([name$="-TOTAL_FORMS"]):not([name$="-INITIAL_FORMS"]):not([name$="-MAX_NUM_FORMS"]), input[type="checkbox"][name$="-DELETE"], input[type="hidden"][name$="-slide"], input[type="file"]');

在我看来,在使用属性选择器时,您应该使用""引号使其成为字符串表示形式,例如:[name$="-MAX_NUM_FORMS"]


另一件事我注意到你在这里有两个逗号, ,

[name$=-slide], , input[type=file]

在选择器的末尾。

答案 1 :(得分:0)

我在我的系统中测试了代码......似乎没有任何错误..代码

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>
var opts="a";  //just delete that
var node="a";    //just delete that
if (typeof opts.getAllInputs === "undefined") {
                node._getAllInputs = function(withManagementForm) {
                    withManagementForm = (typeof withManagementForm === "undefined") ? withManagementForm : false;
                    if (withManagementForm) {
                        return $(this).find("> .nestedFormsetsFieldsSection > li > input:not(.treeLevel), > .nestedFormsetsFieldsSection > li > textarea");
                    } else {
                        return $(this).find("> .nestedFormsetsFieldsSection > li > input:not(.treeLevel):not([name$=-TOTAL_FORMS]):not([name$=-INITIAL_FORMS]):not([name$=-MAX_NUM_FORMS]), > .nestedFormsetsFieldsSection > li > textarea");
                    }
                };
            } else {
                node._getAllInputs = opts.getAllInputs;
}
</script>

答案 2 :(得分:0)

嘿,请将noconflict用于新版本而不是旧版本,因为您的代码与Jquery 1.7.1兼容,那么您需要在noconflict下面编写代码。

<script type="text/javascript">
  var jQuery_1_11_1 = $.noConflict(true);
  </script>

希望有所帮助

答案 3 :(得分:0)

对不起家伙浪费你的时间。我确实找到了问题。函数getAllInputs在其他一些js中被调用,我发现有两个逗号无缘无故(在异常错误中被捕获)。

我不知道为什么它没有被旧版本捕获。这就是原因,因此我从来没有想到问题可能出现在其他一些js中,而不是版本升级。

无论如何我用单个逗号代替它,它就像一个魅力:)。

感谢所有的努力和帮助。