如何选择while循环中的href变量?

时间:2016-03-17 02:01:43

标签: javascript php href attr

我有一个while循环,从数据库中选择多个图像。我有一个带有href的链接,当点击它时会有一个功能,它会打开一个视频模式框。现在,无论选择哪一个,它都只选择第一个href链接。我如何确保它是正确的href,而不仅仅是第一个?

PHP:这部分工作正常。

while ($row = $q->fetch()): 

?>

  <li class="item <?php echo $row['type'];?>"><a href="<?php echo $row['link'];?>" class="test-popup-link">
  <?php if($row['img']) { ?>
  <img src="upload/videoCovers/<?php echo $row['img'];?>" alt="<?php echo $row['title'];?>">
  <?php } 
        else { ?>
  <img src="upload/videoCovers/playBtn.png" alt="<?php echo $row['title'];?>">
  <?php } ?>
  </a>
  </li>
   

JavaScript的:

$(document).ready(function(){   
    var videoLink = $(".test-popup-link").attr("href");

    $('.test-popup-link').magnificPopup({
        items: {
          src: videoLink
        },
        type: 'iframe' // this is default type
    });
});

3 个答案:

答案 0 :(得分:3)

我对该插件一无所知,但是,您可能希望使用.test-popup-link类遍历所有元素并调用.magnificPopup()。请考虑以下事项:

$(document).ready(function(){   
    $('.test-popup-link').each(function() {
      $(this).magnificPopup({
          items: {
            src: $(this).attr('href')
          },
          type: 'iframe' // this is default type
      });
    });
});

修改:快速查看Magnific Popup Documentation后,您似乎也可以使用以下示例。

  

[...]如果要从一个容器中的元素列表创建弹出窗口,请使用此方法。请注意,此方法不启用图库模式,只是减少了点击事件处理程序的数量;每个项目将作为单个弹出窗口打开

HTML

<div class="parent-container">
  <a href="path-to-image-1.jpg">Open popup 1</a>
  <a href="path-to-image-2.jpg">Open popup 2</a>
  <a href="path-to-image-3.jpg">Open popup 3</a>
</div>

的javascript

$('.parent-container').magnificPopup({
  delegate: 'a', // child items selector, by clicking on it popup will open
  type: 'image'
  // other options
});

因此,在您的情况下,您可能需要考虑将ul父级定位到您的列表中。

答案 1 :(得分:0)

让我指出代码中的一些问题

$(document).ready(function(){   
    var videoLink = $(".test-popup-link").attr("href"); // ( 1 )

    $('.test-popup-link').magnificPopup({               //( 2 )
        items: {
          src: videoLink                                //( 3 )
        },
        type: 'iframe' // this is default type
    });
});
  1. $(".test-popup-link").attr("href");此处代码$(".test-popup-link")将返回包含类test-popup-link的所有元素,因此您将获得一组节点,这很好。现在,当您执行.attr("href") 时,仅选择集合中的第一个节点并返回其href
  2. 您正尝试将插件应用于具有类test-popup-link的所有元素,这很好,除非插件的内部配置相同。在您的情况下,它在videoLink值中有所不同,因此您无法以通用方式使用它。 您必须使用循环来应用插件
  3. 如上所述,您的videoLink只保留第一个元素href,只有第一个href值才会应用于所有
  4. 所以解决方案是使用循环来应用插件。这是代码

    $(document).ready(function(){   
        $.each('.test-popup-link',function() { //looping
          $(this).magnificPopup({              // apply to each element in the loop
              items: {
                src: $(this).attr('href')      // apply its respective href
              },
              type: 'iframe' // this is default type
          });
        });
    });
    

答案 2 :(得分:-1)

$('.load-video').on('click', function(e) {
  e.preventDefault();

  var link = $(this).attr('href');

  $('.test-popup-link').magnificPopup({
        items: {
          src: link
        },
        type: 'iframe' // this is default type
    });
});

a 标记

中添加课程
<a class="load-video test-popup-link" href="<?php echo $row['link'];?>">