【问题标题】:jquery parent selector - Syntax error, unrecognized expression )jquery 父选择器 - 语法错误,无法识别的表达式)
【发布时间】:2012-03-09 19:22:12
【问题描述】:

如果您运行此代码并单击某些链接,您将收到此错误消息:

语法错误,无法识别的表达式:)

我还发现')'错误可能与 holder 元素的选择器有关,即:“p.parent()”

<script type="text/javascript" charset="utf-8">
    $(function () {
        var holder = $('p').wrap('<div class="holder"></div>').parent();

        $('a', holder).live('click', function () {
            console.log( $(this).text() );
            return false;
        });

        holder.append('<a href="#">append</a> <a href="#">some</a> <a href="#">elements</a>');
    });
</script>

<p>test</p>

我不知道错误可能出在哪里,我开始认为这是 jquery 中的一个错误,以及它使用 live 选择器的方式。在可能代码的其他部分,我有这样的选择器 $('a', holder).eq(..) 并且它工作正常。

我刚刚开始使用它:

<script type="text/javascript" charset="utf-8">
    $(function () {
        var holder = $('p').wrap('<div class="holder"></div>').parent();

        /*$('a', holder).live('click', function () {
            console.log( $(this).text() );
            return false;
        });*/

        holder.on('click', 'a', function () {
            console.log( $(this).text() );
            return false;
        });

        holder.append('<a href="#">append</a> <a href="#">some</a> <a href="#">elements</a>');
    });
</script>

【问题讨论】:

  • 不是您的错误的来源,但 .live() 已被弃用,取而代之的是 .delegate() 或 .on()。

标签: jquery syntax expression selector parent


【解决方案1】:

无法将字符串包裹在您正在使用的元素周围:

var holder = $('p').wrap('holder').parent();

需要是一个html标签,或者一个jQuery对象

var holder = $('p').wrap('<div>').parent();

查看 wrap() 的 API

http://api.jquery.com/wrap/

【讨论】:

  • 测试代码实际上是:
    $(function () { var holder = $('p').wrap('
    ') .parent(); $('a', holder).live('click', function () { console.log( $(this).text() ); return false; }); holder.append('追加 一些 元素'); });
    跨度>
  • 格式有什么问题..?无论如何,它不适用于实际元素,它在我的第一篇文章中是错字。测试使用var holder = $('p').wrap('&lt;div class="holder"&gt;&lt;/div&gt;').parent(); 并给出错误消息。我刚刚让它与 holder.on('click', 'a', function () {
  • 在jsfiddle.net中放一个demo
  • jsfiddle.net/KYTEx - 你来了。只需打开您的控制台并点击链接。
  • 是的,我知道它与 $('.holder a') 一起使用,但我不能像这样使用它,因为我的代码是在插件主体内执行的,并且必须分别获取每个实例的父级。我会标记我的答案。谢谢。
【解决方案2】:

使用 on() 代替 live() 可以解决错误。

<script type="text/javascript" charset="utf-8">
$(function () {
    var holder = $('p').wrap('<div class="holder"></div>').parent();

    /*$('a', holder).live('click', function () {
        console.log( $(this).text() );
        return false;
    });*/

    holder.on('click', 'a', function () {
        console.log( $(this).text() );
        return false;
    });

    holder.append('<a href="#">append</a> <a href="#">some</a> <a href="#">elements</a>');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-18
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多