Как использовать переменное содержимое в качестве имени класса css?

#php #javascript #jquery #variables

#php #javascript #jquery #переменные

Вопрос:

 <?php
   echo("var answersC = answer-table-$qrow->id;");
   echo("var toggleC = toggle-table-$qrow->id;");
?>

   jQuery('toggleC').click(function() {
      jQuery('answersC').slideToggle('fast');
});
  

Вместо статического имени класса css у меня есть страница, которая создает уникальные классы в цикле. Я надеюсь, что смогу переключать эти отдельные области, но я не знаю, как использовать переменную string в качестве имени класса css.

Я также пробовал это подобным образом, но без особой удачи.

 <?php
   echo("var answersC = $qrow->id;");
   echo("var toggleC = $qrow->id;");
?>

   jQuery('.answer-table-' answerC).click(function() {
      jQuery('answersC' toggleC).slideToggle('fast');
});
  

У кого-нибудь есть идеи? Я не знаю достаточно, чтобы заставить это работать. Спасибо!

ОБНОВЛЕНИЕ: я должен добавить, что это находится на странице PHP в тегах скрипта.

ОБНОВЛЕНИЕ 2:

Я пробовал различные предложения до такой степени, что мои глазные яблоки чувствуют, что они сдерживают голову, полную яичницы-болтуньи. Я довольно хорош в поиске решений js в Google, но у меня не очень обширные знания об этом, поэтому трудно понять, как расширить их, когда они не работают.

Где я сейчас нахожусь, это этот код: (обратите внимание, я переключился с классов на идентификаторы)

 <script type="text/javascript" language="javascript">
    <!--
    <?php
    echo("var answersC = 'answertable' $qrow->id;");
    echo("var toggleC = 'toggletable' $qrow->id;");
    ?>
    jQuery('#' toggleC).click(function() {
    jQuery('#' answersC).slideToggle('fast');
    });
    console.log('#' toggleC); //example #toggletable6
    console.log('#' answersC); //example #answertable6
    // -->
    </script>
  

Я вижу в firebug, что переменное содержимое соответствует идентификаторам в html, и я не получаю никаких ошибок, но это все равно ничего не делает.

В другом месте я использую следующие функции для отображения всех ответов на все вопросы:

 $('.atoggle').click(function() {
$('.answer-table').slideToggle('fast');
});
  

Это работает отлично, только я действительно хочу открывать ответы только для каждого вопроса.

Примечание: Разница между ‘$’ и ‘jQuery’ заключается только в том, что один находится в файле .js внутри функции-оболочки, разрешающей использование ‘$’ в WordPress, тот, который не работает, просто находится в исходном коде страницы на данный момент. Большое спасибо всем за их вклад!

ОБНОВЛЕНИЕ (окончательное):

Для всех, кто столкнется с этим в поиске, я опубликую окончательный рабочий код. Возникла дополнительная проблема с запуском этого, которая требовала переноса всего в функцию document.ready.

Рабочая версия:

 <script type="text/javascript" language="javascript">
    jQuery(document).ready(function() {
    <!--
        <?php
        echo("var answersC = 'answertable' $qrow->id;");
        echo("var newanswersC = 'newanswertable' $qrow->id;");
        echo("var toggleC = 'toggletable' $qrow->id;");
        ?>

        jQuery('.' toggleC).click(function() {
        jQuery('.' answersC).slideToggle('fast');
        jQuery('.' newanswersC).slideToggle('fast');
        });
    });
        // -->
</script>
  

Комментарии:

1. вы пытались увидеть результаты этой оценки кода? Ваши строковые переменные просто не заключены в кавычки.

2. Я бы рекомендовал подход, который не включает в себя генерацию Javascript. В вашем случае я бы присвоил всем кнопкам переключения один и тот же класс CSS (скажем toggle ) и дал бы им идентификатор элемента, который они переключают, в атрибуте данных HTML.

3. В большинстве случаев вам не нужно будет писать так много обработчиков кликов. В jQuery есть потрясающие селекторы, и вы могли бы просто написать один обработчик, который будет работать для всех похожих HTML-тегов. Опубликуйте типичный отрисованный HTML, и мы сможем помочь вам написать этот обработчик.

4. Извините, я так медленно возвращаюсь к этому вопросу. Я готов опробовать предлагаемые решения, но хотел бы объяснить причину такого подхода, если есть еще лучший, я полностью за. По сути, это серверная часть приложения для викторин, и для каждого вопроса есть список ответов. Цель этого скрипта — создать способ переключения отображения ответов на отдельный вопрос. Я уже заработал, чтобы переключать все ответы на все вопросы, но хотел бы более чистое решение.

5. @amit_g — Не могли бы вы немного подробнее остановиться на этом? Итак, я предполагаю, что тогда мой скрипт будет искать не только щелчок по .class_name, но и соответствующий идентификатор в атрибуте пользовательских данных? Я не уверен, как написать эту часть.

Ответ №1:

вместо

 jQuery('toggleC').click(function() {
      jQuery('answersC').slideToggle('fast');
  

попробуйте

 jQuery('.' toggleC).click(function() {
      jQuery('.' answersC).slideToggle('fast');
  

обратите внимание, что если у вас на странице есть несколько переключателей и ответов, щелкните переключателем, чтобы просмотреть все ответы. Чтобы переключать только ответы, принадлежащие click answer, используйте:

 jQuery('.' toggleC).click(function() {
      jQuery(this).find('.' answersC).slideToggle('fast');
  

наконец, обратите внимание, что вам не нужно добавлять идентификатор в класс (transversability, да-да-да), и что вы можете использовать что-то вроде

 jQuery('table').delegate('.' toggleC, 'click', (function() {
    jQuery(this).find('.' answersC).slideToggle('fast');
  

для того, чтобы создать только один обработчик событий вместо «количества строк». (но это не очень важно)

Комментарии:

1. Ваше предложение о том, как назвать класс в функции, правильное, и я проверил, что выполняется синтаксический анализ с правильным идентификатором. Но я попробовал все три варианта с переработанным кодом выше, но, хотя я не получаю ошибок, он также не отображает контент так, как должен. Я понимаю, что на первоначальный вопрос был дан ответ, поэтому я, вероятно, перенесу это в новую тему, но буду признателен за любые дополнительные идеи.

2. если вы можете отредактировать свой вопрос и добавить немного html, включая toogleC и answerC, это очень помогло бы нам помочь вам 😉

3. Я думал об этом прошлой ночью, но понял, что ваш ответ решил мою проблему, поэтому вместо этого я перенес последнюю проблему в новое сообщение. Оказалось, мне просто нужно было обернуть все в функцию document.ready, и все заработало. Еще раз спасибо, что нашли время помочь мне!

Ответ №2:

Если answer-table-*ID* и answersC*ID* классы, приписываемые определенным элементам HTML, попробуйте это:

 <?php
echo 'var qrow_id = '.$qrow->id.';';
?>

jQuery('.answer-table-' qrow_id).click(function() {
      jQuery('.answersC' qrow_id).slideToggle('fast');
});
  

Комментарии:

1. Хорошо замечено, но я предполагаю, $qrow->id что это число. Более того, проблема заключается в JavaScript. Если answersC*ID* это класс, он должен добавить точку в jQuery('answersC' toggleC).slideToggle('fast'); .