Как я могу манипулировать ссылкой или родителем ссылки, если HTML в ссылке что-то равно?

0

РЕДАКТИРОВАТЬ: возможно, это испортило вопрос. означало "если html в ссылке равно переменной php"

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

<ul>
  <li><a href="javascript:void(0)">text1</a></li>
  <li><a href="javascript:void(0)">text2</a></li>
  <li><a href="javascript:void(0)">text3</a></li>
</ul>

<ul>
  <li><a href="javascript:void(0)">500</a></li>
  <li><a href="javascript:void(0)">1000</a></li>
  <li><a href="javascript:void(0)">1500</a></li>
</ul>

поэтому скажем, что эти переменные находятся на странице:

$var1 & $var2

повторяя это следующим образом:

<p><?php echo $var1; ?></p>
<p><?php echo $var2; ?></p>

выведут эти значения:

text1
1000

поэтому я хочу сделать некоторые php и jquery, которые будут делать следующие вещи:

если $ var1 равно text1, тогда сделайте одно из этих 2 в списке 1-й ul. не имеет значения, что:

<li class="active"><a href="javascript:void(0)">text1</a></li>
<li><a href="javascript:void(0)" class="active">text1</a></li>

если $ var1 равно text2, то второй элемент списка в списке 1-й ul должен получить активный класс на "li" или "a".

если $ var1 равно text3, то третий элемент списка в 1-м ящике должен получить активный класс на "li" или "a".

если $ var2 равно 500, тогда первый элемент списка в 2-м списке ul должен получить активный класс на "li" или "a".

если $ var2 равно 1000, тогда второй элемент списка в списке 2-й ul должен получить активный класс на "li" или "a".

если $ var2 равно 1500, то третий элемент списка в списке 2-й ul должен получить активный класс на "li" или "a".

  • 0
    Почему вы не генерируете меню в коде и не меняете вывод напрямую?
  • 0
    Меню само по себе находится в php-файле без возможности логики или переменных. он включен в другую страницу php, которая имеет всю логику php и jquery.
Показать ещё 2 комментария
Теги:
database
variables

3 ответа

0

Я сделал это по-другому.

сначала я помещаю уникальные имена классов во все пункты меню. Я использовал классы вместо id, потому что каждое меню оно использовало несколько раз на странице.

то я использовал этот код для создания активной css...

<?php if($varset1a == "500") { ?>
<script type='text/javascript'>$(document).ready(function() { $("#idname1a ul.classname li.classname1").addClass("active"); });</script>
<?php } ?>

<?php if($varset1a == "1000") { ?>
<script type='text/javascript'>$(document).ready(function() { $("#idname1b ul.classname li.classname2").addClass("active"); });</script>
<?php } ?>

<?php if($varset2a == "name1") { ?>
<script type='text/javascript'>$(document).ready(function() { $("#anotheridname1 ul.classname li.anotherclassname1").addClass("active"); });</script>
<?php } ?>

<?php if($varset2a == "name2") { ?>
<script type='text/javascript'>$(document).ready(function() { $("#anotheridname2 ul.classname li.anotherclassname2").addClass("active"); });</script>
<?php } ?>

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

скажите об этом много:

varset1a1 через varset1a17

то varset1b имеет от 1 до 17, затем varset1c имеет от 1 до 17, затем varset1d имеет от 1 до 17, затем varset1e имеет от 1 до 17.

затем удвоить все это и изменить varset1 на varset2, а также о том, сколько разных правил существует. на самом деле больше, потому что меню 2 имеет больше ссылок, чем меню 1.

это много, чтобы программировать, но только 6 строк в меню получают в HTML-коде HTML.

это пример, если используются все 6 из обоих меню. это будет меньше, если использовать меньше меню. количество используемых меню варьируется, но это полная сумма:

<script type='text/javascript'>$(document).ready(function() { $("#id1a ul.class li.class1a").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id2a ul.class li.class2a").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id3a ul.class li.class3a").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id4a ul.class li.class4a").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id5a ul.class li.class5a").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id6a ul.class li.class6a").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id1b ul.class li.class1b").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id2b ul.class li.class2b").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id3b ul.class li.class3b").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id4b ul.class li.class4b").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id5b ul.class li.class5b").addClass("active"); });</script>
<script type='text/javascript'>$(document).ready(function() { $("#id6b ul.class li.class7b").addClass("active"); });</script>

возможно, я могу сократить символы, если я сделаю все это между одним набором тегов <script> и одним предложением для документа? Я ненавижу установку php между jquery, потому что много раз Dreamweaver создает синтаксические ошибки.

РЕДАКТИРОВАТЬ:

ОК, теперь полный вывод html выглядит так и работает:

<script type='text/javascript'>
$(document).ready(function() {
  $("#id1a ul.class li.class1a").addClass("active");
  $("#id2a ul.class li.class2a").addClass("active");
  $("#id3a ul.class li.class3a").addClass("active");
  $("#id4a ul.class li.class4a").addClass("active");
  $("#id5a ul.class li.class5a").addClass("active");
  $("#id6a ul.class li.class6a").addClass("active");
  $("#id1b ul.class li.class1b").addClass("active");
  $("#id2b ul.class li.class2b").addClass("active");
  $("#id3b ul.class li.class3b").addClass("active");
  $("#id4b ul.class li.class4b").addClass("active");
  $("#id5b ul.class li.class5b").addClass("active");
  $("#id6b ul.class li.class7b").addClass("active");
});
</script>

как я это делал, поставив такие правила:

<script type='text/javascript'>
$(document).ready(function() { 
<?php if($varset1a == "500") { ?>$("#id1a ul.class li.class1a").addClass("active");<?php } ?>
<?php if($varset1a == "1000") { ?>$("#id2b ul.class li.class2a").addClass("active");<?php } ?>
<?php if($varset2a == "name1") { ?>$("#id2a ul.class li.class1b").addClass("active");<?php } ?>
<?php if($varset2a == "name2") { ?>$("#id2b ul.class li.class2b").addClass("active");<?php } ?>
});
</script>
0

Непонятно, почему вы не повлияли на разметку HTML при ее создании на сервере, так как я предполагаю, что у вас уже есть переменные на сервере - возможно, они поступают из запроса клиента (навигация по страницам?). Однако, чтобы ответить на ваш вопрос:

Обход и манипулирование элементами DOM

Вам понадобятся переменные, доступные на клиенте с Javascript. Затем вы можете перебрать li и сравнить их значение с переменными. Как только совпадение найдено, вы можете внести коррективы в свой элемент DOM (например, jQuery addClass).

Для циклизации см. JQuery каждый и текст jQuery для текстового содержимого элемента.

Как получить переменные в Javascript:

Как указано выше, для этого требуется, чтобы Javascript "знал" эти переменные. Там нет волшебства, чтобы сделать эту работу. Вам нужно будет получить их с сервера, либо он включен как код Javascript на странице, первоначально запрошенной с сервера (например, когда вы делаете http://www.example.com/index.html), либо ваш код Javascript делает XMLHttpRequest для сервера (см. JQuery ajax для этого) и анализирует переменные из ответа.

0

Вы можете сделать это с помощью встроенного оператора if

<ul>
  <li><a href="javascript:void(0)" style="<?php echo $var1 == "text1" ? "active":"" ?>">text1</a></li>
  <li><a href="javascript:void(0)" style="<?php echo $var1 == "text2" ? "active":"" ?>">text2</a></li>
  <li><a href="javascript:void(0)" style="<?php echo $var1 == "text3" ? "active":"" ?>">text3</a></li>
</ul>

<ul>
  <li><a href="javascript:void(0)" style="<?php echo $var2 == "500" ? "active":"" ?>">500</a></li>
  <li><a href="javascript:void(0)" style="<?php echo $var2 == "1000" ? "active":"" ?>">1000</a></li>
  <li><a href="javascript:void(0)" style="<?php echo $var2 == "1500" ? "active":"" ?>">1500</a></li>
</ul>
  • 0
    одно и то же точное меню используется на странице много раз. Единственный способ, которым это может сработать, - это если $ var1 можно изменить на $ var2 или $ var3 или $ var4 или $ var5 или $ var6 на лету в соответствующих местах страницы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню