jQuery содержит () с переменным синтаксисом

18

У меня есть «неперехваченное исключение: ошибка синтаксиса, нераспознанное выражение:)» в приложении jQuery.

Код:

<script>
    $(document).ready(function(){                      
        $('.drag').click(function() {
           $('.drag').each(function(i) {
                $(this).addClass('test' + i)
            });  

           var vtxt = $(this).text();
           $("p").removeClass("on");
           $("p:contains("+ vtxt +")").addClass("on");

       });
    });

Проблема заключается в том, что я добавляю переменную vtxt в a содержит: $ ("p: содержит (" + vtxt + ")"). addClass ("on");

Я пробовал несколько кавычек, но он просто не работает. Какой правильный синтаксис для добавления переменной в a содержит?

    
задан Mircea 03.02.2010 в 12:12
источник
  • Каково значение vtxt. Он может содержать скобки. –  Emil Ivanov 03.02.2010 в 12:23
  • Это не jQuery, как таковое. Это ваш ввод JavaScript, содержащий () синтаксически неправильный. :) –  bzlm 03.02.2010 в 12:33

3 ответа

42

Попробуйте следующее:

$("p:contains('" + vtxt + "')").addClass("on");
    
ответ дан Andrew Hare 03.02.2010 в 12:16
  • vtxt не содержит скобок. Ответ Эндрю дал мне действительный синтаксис, он работает сейчас. Спасибо! –  Mircea 03.02.2010 в 12:29
  • убедитесь, что вы избегаете содержимого vtxt, поскольку он будет терпеть неудачу, если он когда-либо будет содержать символ «или». –  Gabriele Petrioli 03.02.2010 в 12:37
  • Как мне избежать vtxt? –  Mircea 03.02.2010 в 12:41
  • С обратной косой чертой. Или просто перебираем все элементы p, которые фильтруют для p.text (). IndexOf (vtxt)! == 1. Это позволяет избежать проблемы экранирования и не медленнее, чем версия селектора, поскольку это нестандартный селектор, который jQuery должен реализовывать одним и тем же способом. –  bobince 03.02.2010 в 13:01
  • Если этот ответ соответствует вашим потребностям, вы можете принять его, не так ли? –  NilColor 03.02.2010 в 13:24
5

Старый вопрос, но я должен оставить записку для будущих поколений. Ответ Эндрю (принятый) не помог мне. В работе did использовалась готовая строка в качестве селектора. Заимствование примеров OP:

var selector = "p:contains("+ vtxt +")";
$(selector).addClass("on");
    
ответ дан Nelo Mitranim 11.12.2013 в 07:12
1

Я использовал этот ответ, чтобы решить подобную проблему.
Я хочу предотвратить использование " и '

При использовании $("p:contains('" + valor + "')").addClass("on"); он работает .

Но при использовании $('p:contains('" + valor + "')**'**).addClass("on") он не !

    
ответ дан combuilder 01.02.2011 в 16:29