PHP foreach проблема с JQuery - PullRequest
       3

PHP foreach проблема с JQuery

2 голосов
/ 25 марта 2011

У меня есть цикл foreach, который без проблем зацикливает и показывает все данные в массиве, однако у меня есть некоторый jQuery, который я хочу применить к результатам, но jQuery работает только с первым фрагментом данных, который будет отображаться. Я не совсем уверен, почему, если кто-то может помочь, это было бы здорово.

$count_limit = 0;
$limit = 5;

foreach ( $feeds->data as $item ) {
extract( (array) $item );
if($count_limit++  < $limit){
?>
<div id="news_post">
    <? $title_str = str_replace('–', '&#150;', $title) ?>
    <p class="news_title"><a href="<?php echo $link; ?>" target="_blank"><?php echo $title_str; ?></a> <a href="#" class="read">read...</a></p>
    <div class="news_desc"><?php echo "$description" ?></div>
</div>
<? }
else {
    break;
}


$(this).next('.news_desc').hide();
        $(this).next('a.read').click(function() {
            $(this).next('.news_desc').toggle();
        });

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Вы забыли опубликовать используемый вами jQuery :-) Но я подозреваю, что это потому, что все используемые вами div имеют одинаковый идентификатор ("news_post"), поэтому jQuery использует только первый найденный идентификатор.

Вы можете добавить идентификатор к $count_limit, чтобы создать действительно уникальный идентификатор (спецификации HTML также не допускают использование нескольких элементов с одним и тем же атрибутом id) или изменить способ, которым jQuery выбирает элементы для работы (например, по имени класса ).

РЕДАКТИРОВАТЬ: Прошло много времени с тех пор, как я использовал jQuery, но это выглядит странно, почему бы просто не использовать:

$(.news_desc').hide();
$('a.read').click(function() {
  $(this).next('.news_desc').toggle();
});
0 голосов
/ 25 марта 2011

Так что я бы переместил jQuery за пределы цикла, и я бы скрыл каждое сообщение по умолчанию, за исключением первого.

$('.news_desc').not(':first').hide();

Затем я бы добавил клик даже, который скроет все, кромевыбран один.

$('a.read').click(function() {
     $('.news_desc').not(this).hide();
}

Не уверен на 100%, что это будет работать, так как я уже давно использовал jQuery, но я предполагаю, что вы хотите показывать только заголовки сообщений и иметь только 1 описание сообщенияв поле зрения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...