2013-06-13 4 views
45

У меня возникают проблемы с использованием переменной в качестве селектора для абзаца, на котором я хочу принять меры. В частности, у меня есть несколько элементов заголовка и одинаковое количество абзацев. Желаемый результат состоит в том, что, если я нажму на Title1, я начну действие с пунктом 1. Я сделал простой пример для целей разработки, в котором, если я нажму на название, текст соответствующего абзаца изменит цвет. Если я жестко кодирую решение, оно работает, но передается переменной при неудачном селекторе.jQuery: использование переменной в качестве селектора

JQuery выглядит следующим образом:

jQuery(document).ready(function($){ 
     $(this).click(function(){ 

     var target=(event.target.id);// Get the id of the title on which we clicked. We will extract the number from this and use it to create a new id for the section we want to open. 
     alert(target);// checking that we are getting the right value. 
     var openaddress=target.replace(/click/gi, "section");//create the new id for the section we want to open. 
     alert('"#'+openaddress+'"');//Confirm that the correct ID has been created 
     $('"#'+openaddress+'"').css("color", "green");//get the id of the click element and set it as a variable. 
     //$("#section1").css("color", "green");//Test to confirm that hard coded selector functions correctly. 

      return false;// Suppress the action on the anchor link. 
      }); 


    }); 

Оповещение возвращает следующую переменную alert returned showing the value of the variable которая, как представляется правильным и соответствует жесткий кодированный версии. Я пропустил html, так как он работает в жесткой кодированной версии. Я полагаю, что с этой стороны нет проблем.

Буду признателен за то, что я делаю неправильно, и как его исправить.

Thanks

+1

Попробуйте отказаться от вторых цитат вокруг '' # section1 "', поэтому строка, фактически переданная в jQuery, будет '' section1' по желанию. Если это имеет смысл. Попробуйте просто передать '' # '+ openaddress'. Обратите внимание, что ваш код проходит в '' # section1 '', и ваш тест использует' # section1'. –

+0

'' #foo "' в '$ (" # foo ")' называется ** строковым литералом ** и выдает строку * значение * '# foo'. Строковые литералы обозначаются двумя кавычками (либо двойными, либо одинарными кавычками). Это похоже на другие значения: '[...]' обозначать массив, '/.../' литерал регулярного выражения, '{...}' объект и т. Д. Эти символы говорят синтаксическому анализатору, как интерпретировать последовательность символов. Они не ** являются частью стоимости сами! Таким образом, jQuery ожидает '# foo' в качестве селектора, но вы включаете кавычки в значение и передаете' '# foo'', что неверно. –

+0

@FelixKling: Спасибо за помощь. Я не был прав на строковый литерал и значение, используемое jQuery. Мне было нужно объяснение, поэтому «дублирующий» вопрос для меня не помог (но только из-за моего невежества.) – dorich

ответ

119

Вы думаете слишком сложно. На самом деле это всего лишь $('#'+openaddress).

Смежные вопросы