【问题标题】:Magnific popup: Get current element in callbackMagnific popup:在回调中获取当前元素
【发布时间】:2013-06-02 18:21:57
【问题描述】:

在 Magnific Popup 中,我想在被点击的链接中获取一个属性,并在回调函数(使用回调:open)中使用它来对 DOM 进行一些更改。

我该怎么做?例如,在下面的代码中,它应该向控制台返回“it works”。相反,它会打印“不起作用”。请帮忙!!

<a href="#test-popup" class="open-popup-link" myatt="hello">Show inline popup</a>

<script src="jquery.magnetic.custom.js"></script>

<script>

    $(document).ready(function() {
      $('.open-popup-link').magnificPopup({
        type:'inline',
        midClick: true,
        callbacks: {
          open: function() {

            if ($(this).attr('myatt')=="hello") 
            { 
              // do something 
              console.log("it works");
            }
            else
            {
              console.log("doesnt work");
            }

          },
          close: function() {

          }
        }

      });
    });

</script>

<div id="test-popup" class="white-popup mfp-hide">
  Popup content
</div>

【问题讨论】:

    标签: javascript jquery magnific-popup


    【解决方案1】:

    对于 Magnific Popup v0.9.8

    var magnificPopup = $.magnificPopup.instance,
                  cur = magnificPopup.st.el;
    console.log(cur.attr('myatt'));
    

    【讨论】:

      【解决方案2】:

      首先,我建议您使用数据属性( data-custom="foo" )或已知属性。

      HTML:

        <a href="photo.jpg" class="popup" data-custom="dsaad">Do it!</a>
        <a href="photo.png" class="popup" data-custom="mycustomdata">Do it!</a>
      

      jQuery :

      $('.popup').magnificPopup({
        type : 'image',
        callbacks : {
          open : function(){
            var mp = $.magnificPopup.instance,
                t = $(mp.currItem.el[0]);
      
            console.log( t.data('custom') );
          }
        }
      });
      

      我不知道是否存在更好的方法。实际上你可以阅读他们关于公共方法的文档,你会在那里看到。我测试了上面的代码,一切正常:)

      【讨论】:

      • 请注意,上述内容仅适用于旧版本的 Magnific Popup。如果您使用的是 0.9.8 之后的版本,请参阅下面的@Konpaka 答案。
      【解决方案3】:

      对于 0.9.9 版:

      this.currItem.el

      【讨论】:

        【解决方案4】:
        // "item.el" is a target DOM element (if present)
        // "item.src" is a source that you may modify
        open: function(item) {}
        

        并使用数据属性,例如 data-myatt - 得到:

        $(this).data('myatt')
        

        【讨论】:

          【解决方案5】:

          可以在回调中访问被点击的元素:

          this.st.el
          

          在回调内部,“this”指的是 $.magnificPopup.instance。

          在公共属性下:

          "magnificPopup.st.el // 目标单击的打开弹出窗口的元素(如果弹出窗口是从 DOM 元素初始化的则有效)"

          【讨论】:

            【解决方案6】:

            另外,在open: function(item) {}this.content 内部可能会有所帮助。它会返回正在显示的内容的 div。 change: function () {} 也很有用。希望它可以帮助像我这样的人。

            【讨论】: