Получение динамически заданных идентификаторов div из документа

#php #javascript

#php #javascript

Вопрос:

Я не разработчик, но я некоторое время баловался этим. Надеюсь, вы сможете помочь

У меня есть несколько div с ID:s, которые динамически присваиваются им через php. У меня есть функция, которая вызывается через флажок, который скрывает и показывает divs. Что я хочу сделать сейчас, так это получить идентификаторы div из документа и поместить их в функцию.

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

Вот что у меня есть

Присваивает идентификаторы разделам:

 $a .= "<div id='$go[media_caption]" . $i . "'>";
  

Функция:

 var editorial = [id^='editorial']);

function visiblox(arrDiv, hs) {
var disp = (hs) ? 'none' : 'block';
for(var x = 0; x < arrDiv.length; x  ) {
document.getElementById(arrDiv[x]).style.display = disp;
    }

}

function chk(what, item) {
if(item) {
    visiblox(what, false);
} else {
    visiblox(what, true);
}
}
  

Вызывает функцию:

 <input type='checkbox' onclick='chk(editorial, this.checked);' checked> Editorial</p>
  

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

1. Проблема в том, что всем вашим разделам присваивается один и тот же идентификатор?

2. Строка var editorial = [id^='editorial']); полна синтаксических ошибок. Что вы хотите, чтобы editorial переменная содержала?

3. Я могу себе представить, что это такое. В принципе, я хочу, чтобы он содержал все разделы, которые начинаются с ‘editorial’. Я хочу, чтобы все они скрывались / показывались, когда я нажимаю на флажок. Спасибо

4. Скорее, я хочу, чтобы он содержал все идентификаторы div, которые начинаются с editorial .. в виде списка, разделенного запятыми и пробелом.

Ответ №1:

Можете ли вы заставить ваш PHP выводить массив для использования вашим Javascript? Поскольку PHP выводит идентификаторы, он также добавит их в строку, которая находится в синтаксисе массива Javascript. Что-то вроде этого:

 $a .= "<div id='$go[media_caption]" . $i . "'>";
$jsIDs .= "'$go[media_caption]',";
  

Затем в конце файла, непосредственно перед тем, как PHP-файл закроет теги </body> и </html> , выведите массив в виде скрипта:

 $jsIDs = substr($jsIDs, 0, strlen($jdIDs)-1);  // strip off the last comma
$jsIDs = "<script type='text/javascript'>var idArr = [" . $jsIDs . "];</script>";
echo($jsIDs);
  

Тогда внутри javascript вам не нужно искать идентификаторы в DOM. Вы можете просто использовать массив (в моем примере я назвал его idArr ).


ОБНОВЛЕНИЕ: Мартин говорит, что идентификаторы, выводимые PHP, иногда начинаются с «editorial», некоторые начинаются с чего-то другого. Чтобы собрать только те, которые начинаются с «editorial», измените строку выше, которая начинается с $jsIDs .= , на эти две строки:

 if ( substr($go[media_caption], 9) == "editorial" )
    $jsIDs .= "'$go[media_caption]',";
  

Это должно сработать.

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

1. Я пытаюсь разобраться в этом. divs создаются и присваиваются идентификаторы внутри foreach ($ pages как $ go) в php. Таким образом, каждый DIV получает имя из записи в базе данных, плюс номер (amp; i). Правильно ли это выглядит? foreach ($pages как $go) { $a .= «<идентификатор div=’$go[media_caption]» . $i . «‘>»; $jsIDs .= «‘$go[media_caption]’, «; }

2. Когда они будут созданы, могут ли они также быть добавлены в список, который затем будет вызван в javascript?

3. Основная идея заключается в том, что в дополнение к генерации HTML с помощью PHP вы также генерируете небольшое количество Javascript. В частности, вы используете PHP для построения строки, содержащей массив Javascript. Созданный вами массив Javascript содержит идентификаторы DIVS, сгенерированные PHP.

4. Итак, после строки PHP, которая добавляется к $a , также добавьте к $jsIDs . Вы хотите, чтобы $jsIDs строка выглядела следующим образом: 'id1','id2','id3', и т.д. Наконец, в конце вы удаляете конечную запятую и помещаете вокруг строки допустимый код Javascript, так что в конечном итоге она выглядит следующим образом: <script type='text/javascript'>var idArr=['id1','id2','id3'];</script> . Это допустимая строка Javascript, созданная PHP и сохраненная в PHP string. Вы можете вывести это с помощью инструкции PHP echo , чтобы включить его как часть HTML-документа, который создает PHP.

5. Я думаю, что я понял это! Спасибо. Нет, есть только одна вещь, о которой я забыл упомянуть; Существуют разные наборы divs. Некоторые из них называются редакционными, некоторые называются как-то иначе. У меня будет один соответствующий флажок для каждого. Есть ли способ отделить их друг от друга; т. е. $ jsIDs будет содержать только строки, начинающиеся с editorial?