#php #jquery #each
#php #jquery #каждый
Вопрос:
изучение Jquery и интеграция с PHP — добиваюсь своего, но есть одна последняя проблема в коде, над которым я работаю.
У меня есть HTML в строке, пытаюсь извлечь html в тегах, в HTML-строке может быть несколько элементов, поэтому пытаюсь использовать каждый. Моя функция отлично работала без each, ниже приведена моя интеграция each (в настоящее время ничего не возвращает):
<?php
$info = '<li><strong><a href="http://www.mysite.com/test.html" title="Some stuff">I want this text</a></strong></li><li><strong><a href="http://www.mysite.com/test2.html" title="Some stuff">I want this text too</a></strong></li>';
$info = json_encode($info);
?>
<script type="text/javascript">
$(document).ready(function () {
$("a", $( < ? php echo $info; ? > )).each(
function () {
alert($(this).html());
});
};
Приведенный ниже код действительно работает, но возвращает только первый элемент в HTML:
<?php
$info = '<li><strong><a href="http://www.mysite.com/test.html" title="Some stuff">I want this text</a></strong></li>';
$info = json_encode($info);
?>
<script type="text/javascript">
$(document).ready(function () {
var output = $("a", $( < ? php echo $info; ? > )).html();
var link = $("a", $( < ? php echo $info; ? > )).attr("href");
alert(output);
alert(link);
});
</script>
Комментарии:
1. у вас есть только один тег a, поэтому
2. На самом деле приведенный выше код вообще не возвращает никаких предупреждений, даже первого тега. Я заметил, что в моем HTML не было второго <a> (было из примера, опубликованного ранее), поэтому добавлено в мой код и post, по-прежнему без кубиков.
3. вы хотите прочитать
href
значение?4. в конечном итоге я, вероятно, буду использовать href, но прямо сейчас я просто хочу, чтобы каждый мой код работал, тогда я смогу фильтровать
5. второй пример с href attr работает, но не получает все элементы в переменной $info, только первый…
Ответ №1:
Это описание и рабочий пример того, как использовать .each()
ССЫЛКУ
Вы можете попробовать этот в качестве примера
$("a").each(function(index){alert($(this).html()});
Комментарии:
1. Спасибо — да, я работал именно с этим, включая некоторые другие примеры. Я не могу понять, что я делаю не так … извините, что публикую такой простой вопрос, действительно новый для jquery (последние пару дней)
2. @user760305: вы можете попробовать этот
$("a").each(function(index){alert($(this).html()});
3. Томас — используя ваш приведенный выше пример, я действительно приступил к работе. просто посмотрел, и мне чего-то не хватало }); таким образом, после реализации вашего примера исходный сбой. исправлено и теперь отлично работает. Огромное спасибо!
Ответ №2:
Ваш код не работает, потому что есть несколько проблем с синтаксисом.
Во-первых, измените
< ? php echo $info; ? >
Для
<?php echo $info; ?>
PHP не любит пробелы, и открывающий и закрывающий теги должны отображаться без пробелов.
Во-вторых, закройте функцию ready и тег script должным образом. Вместо
};
использовать,
});
</script>
Почему вы кодируете фрагмент XML с помощью JSON? Это не имеет никакого смысла вообще. Оба являются способами кодирования данных. HTML — это тоже XML, кстати. Вы можете напрямую ссылаться на $info
переменную, поскольку PHP сначала обработает все на сервере.
<?php
$info = '<li><strong><a href="http://www.mysite.com/test.html" title="Some stuff">I want this text</a></strong></li>';
?>
<script type="text/javascript">
$(document).ready(function() {
$("a", $("<?php echo $info; ?>")).each(
function () {
alert($(this).html());
}
);
});
Или просто удалите временную переменную вообще. Затрудняет чтение, но это, по сути, то, что делает PHP.
$("a", $("<?php echo '<li><strong><a href="http://www.mysite.com/test.html" title="Some stuff">I want this text</a></strong></li>'; ?>")).each(
Или, чтобы сделать это еще проще, поскольку у вас уже есть HTML, просто включите его как часть страницы и, возможно, присвоите ему идентификатор, чтобы упростить обращение к нему с помощью jQuery.
<li id="myList">
<strong><a href="http://www.mysite.com/test.html" title="Some stuff">I want this text</a></strong>
</li>
<script type="text/javascript">
$(document).ready(function() {
$("a", "#myList").each(function() {
alert($(this).html());
});
});
</script>
Этот последний пример полностью избавляет от PHP, но на самом деле вы все равно его не использовали.
Комментарии:
1. Без JSON HTML отображался некорректно, «они мешали и неправильно отображали javascript»…
2. опять же, я определенно новичок в этом, поэтому я открыт для предложений. удалить кодировку json, как вы думаете? дело в том, что у меня есть процедура, которая заполняет переменную $info, поэтому проще использовать var
3. Понятно, как насчет добавления HTML непосредственно на страницу, как в моем последнем примере?
4. Вместо добавления всего HTML в виде строковой переменной PHP, немного лучшим подходом является добавление HTML напрямую и использование PHP только для частей, отличных от HTML. Я создал простой пример здесь — pastium.com/view/ba2f23bbe3a0da254d68f9f72f1194d6
5. К вашему сведению, вся страница написана на PHP, это всего лишь фрагмент и только jquery на странице, вот почему PHP там