У меня возникают проблемы с использованием переменной в качестве селектора для абзаца, на котором я хочу принять меры. В частности, у меня есть несколько элементов заголовка и одинаковое количество абзацев. Желаемый результат состоит в том, что, если я нажму на 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.
});
});
Оповещение возвращает следующую переменную которая, как представляется правильным и соответствует жесткий кодированный версии. Я пропустил html, так как он работает в жесткой кодированной версии. Я полагаю, что с этой стороны нет проблем.
Буду признателен за то, что я делаю неправильно, и как его исправить.
Thanks
Попробуйте отказаться от вторых цитат вокруг '' # section1 "', поэтому строка, фактически переданная в jQuery, будет '' section1' по желанию. Если это имеет смысл. Попробуйте просто передать '' # '+ openaddress'. Обратите внимание, что ваш код проходит в '' # section1 '', и ваш тест использует' # section1'. –
'' #foo "' в '$ (" # foo ")' называется ** строковым литералом ** и выдает строку * значение * '# foo'. Строковые литералы обозначаются двумя кавычками (либо двойными, либо одинарными кавычками). Это похоже на другие значения: '[...]' обозначать массив, '/.../' литерал регулярного выражения, '{...}' объект и т. Д. Эти символы говорят синтаксическому анализатору, как интерпретировать последовательность символов. Они не ** являются частью стоимости сами! Таким образом, jQuery ожидает '# foo' в качестве селектора, но вы включаете кавычки в значение и передаете' '# foo'', что неверно. –
@FelixKling: Спасибо за помощь. Я не был прав на строковый литерал и значение, используемое jQuery. Мне было нужно объяснение, поэтому «дублирующий» вопрос для меня не помог (но только из-за моего невежества.) – dorich