【问题标题】:How do I link the jQuery plugin in html document如何在 html 文档中链接 jQuery 插件
【发布时间】:2014-10-27 06:06:53
【问题描述】:

我想在 HTML 文档中链接 Social FloatingShare jQuery 插件。我已经尝试链接这个 jQuery 插件,但是调用插件函数floatingShare() 并没有像我一样工作。

我有两个问题:

  1. 如何在我的 html 文档中链接 jQuery?
  2. 我在代码中犯了什么错误?

我的源代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Jquery Plugin</title>
    <style>
        body { margin: 0px; padding: 0px; background: #ccc; }
        .container { height: 500px; width: 1000px; margin: 0px auto; padding: 0px; }
    </style>
    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.1.0/css/font-awesome.min.css">
</head>
<body>
<div class="container">
    <script type="text/javascript">
        $(function(){
            $("body").floatingShare();
        });
    </script>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="js/jquery.floating-share.js" type="text/javascript"></script>
</body>
</html>

【问题讨论】:

标签: jquery html jquery-plugins


【解决方案1】:

你需要在使用前包含jquery插件,因为所有的jQuery或jQuery函数在使用前都应该可用,所以更改jquery库和脚本顺序如下所示-

注意 - 最好将脚本标签直接保存在 &lt;body&gt;&lt;head&gt; 标签中,而不是任何其他 html 元素中。

<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
<script src="js/jquery.floating-share.js" type="text/javascript"></script>
<script type="text/javascript">
  $(function(){
   $("body").floatingShare();
  });
</script> 
<div class="container"> 

</div>

</body>

【讨论】:

    【解决方案2】:

    Body 块末尾包含所有.js 文件是加载性能的好习惯。然后,您必须确保在页面完全加载后从您的引用中调用任何 JavaScript 函数。

    我通常选择的两个常见选项:

    选项 1。在Head 中包含jQuery 库,并将所有其他.js 文件保留在Body 块的末尾。在您的情况下,与 JavaScript 相关的部分代码应为:

        <head>
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
        </head>
        <body>
            <div class="container"> 
                <script type="text/javascript">
                    $(document).ready(function(){
                        $("body").floatingShare();
                    });
                </script> 
            </div>
            <script src="js/jquery.floating-share.js" type="text/javascript"></script>
        </body>
    

    选项 2。将所有.js 文件保留在Body 块的末尾,然后在JavaScript 中实现$(document).ready(),而不是使用jQuery 库。根据 jQuery 资源,$(document).ready() 的等效纯 JavaScript 实现是:

        var ready = (function(){    
    
            var readyList,
                DOMContentLoaded,
                class2type = {};
                class2type["[object Boolean]"] = "boolean";
                class2type["[object Number]"] = "number";
                class2type["[object String]"] = "string";
                class2type["[object Function]"] = "function";
                class2type["[object Array]"] = "array";
                class2type["[object Date]"] = "date";
                class2type["[object RegExp]"] = "regexp";
                class2type["[object Object]"] = "object";
    
            var ReadyObj = {
                // Is the DOM ready to be used? Set to true once it occurs.
                isReady: false,
                // A counter to track how many items to wait for before
                // the ready event fires. See #6781
                readyWait: 1,
                // Hold (or release) the ready event
                holdReady: function( hold ) {
                    if ( hold ) {
                        ReadyObj.readyWait++;
                    } else {
                        ReadyObj.ready( true );
                    }
                },
                // Handle when the DOM is ready
                ready: function( wait ) {
                    // Either a released hold or an DOMready/load event and not yet ready
                    if ( (wait === true && !--ReadyObj.readyWait) || (wait !== true && !ReadyObj.isReady) ) {
                        // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
                        if ( !document.body ) {
                            return setTimeout( ReadyObj.ready, 1 );
                        }
    
                        // Remember that the DOM is ready
                        ReadyObj.isReady = true;
                        // If a normal DOM Ready event fired, decrement, and wait if need be
                        if ( wait !== true && --ReadyObj.readyWait > 0 ) {
                            return;
                        }
                        // If there are functions bound, to execute
                        readyList.resolveWith( document, [ ReadyObj ] );
    
                        // Trigger any bound ready events
                        //if ( ReadyObj.fn.trigger ) {
                        //  ReadyObj( document ).trigger( "ready" ).unbind( "ready" );
                        //}
                    }
                },
                bindReady: function() {
                    if ( readyList ) {
                        return;
                    }
                    readyList = ReadyObj._Deferred();
    
                    // Catch cases where $(document).ready() is called after the
                    // browser event has already occurred.
                    if ( document.readyState === "complete" ) {
                        // Handle it asynchronously to allow scripts the opportunity to delay ready
                        return setTimeout( ReadyObj.ready, 1 );
                    }
    
                    // Mozilla, Opera and webkit nightlies currently support this event
                    if ( document.addEventListener ) {
                        // Use the handy event callback
                        document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
                        // A fallback to window.onload, that will always work
                        window.addEventListener( "load", ReadyObj.ready, false );
    
                    // If IE event model is used
                    } else if ( document.attachEvent ) {
                        // ensure firing before onload,
                        // maybe late but safe also for iframes
                        document.attachEvent( "onreadystatechange", DOMContentLoaded );
    
                        // A fallback to window.onload, that will always work
                        window.attachEvent( "onload", ReadyObj.ready );
    
                        // If IE and not a frame
                        // continually check to see if the document is ready
                        var toplevel = false;
    
                        try {
                            toplevel = window.frameElement == null;
                        } catch(e) {}
    
                        if ( document.documentElement.doScroll && toplevel ) {
                            doScrollCheck();
                        }
                    }
                },
                _Deferred: function() {
                    var // callbacks list
                        callbacks = [],
                        // stored [ context , args ]
                        fired,
                        // to avoid firing when already doing so
                        firing,
                        // flag to know if the deferred has been cancelled
                        cancelled,
                        // the deferred itself
                        deferred  = {
    
                            // done( f1, f2, ...)
                            done: function() {
                                if ( !cancelled ) {
                                    var args = arguments,
                                        i,
                                        length,
                                        elem,
                                        type,
                                        _fired;
                                    if ( fired ) {
                                        _fired = fired;
                                        fired = 0;
                                    }
                                    for ( i = 0, length = args.length; i < length; i++ ) {
                                        elem = args[ i ];
                                        type = ReadyObj.type( elem );
                                        if ( type === "array" ) {
                                            deferred.done.apply( deferred, elem );
                                        } else if ( type === "function" ) {
                                            callbacks.push( elem );
                                        }
                                    }
                                    if ( _fired ) {
                                        deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
                                    }
                                }
                                return this;
                            },
    
                            // resolve with given context and args
                            resolveWith: function( context, args ) {
                                if ( !cancelled && !fired && !firing ) {
                                    // make sure args are available (#8421)
                                    args = args || [];
                                    firing = 1;
                                    try {
                                        while( callbacks[ 0 ] ) {
                                            callbacks.shift().apply( context, args );//shifts a callback, and applies it to document
                                        }
                                    }
                                    finally {
                                        fired = [ context, args ];
                                        firing = 0;
                                    }
                                }
                                return this;
                            },
    
                            // resolve with this as context and given arguments
                            resolve: function() {
                                deferred.resolveWith( this, arguments );
                                return this;
                            },
    
                            // Has this deferred been resolved?
                            isResolved: function() {
                                return !!( firing || fired );
                            },
    
                            // Cancel
                            cancel: function() {
                                cancelled = 1;
                                callbacks = [];
                                return this;
                            }
                        };
    
                    return deferred;
                },
                type: function( obj ) {
                    return obj == null ?
                        String( obj ) :
                        class2type[ Object.prototype.toString.call(obj) ] || "object";
                }
            }
            // The DOM ready check for Internet Explorer
            function doScrollCheck() {
                if ( ReadyObj.isReady ) {
                    return;
                }
    
                try {
                    // If IE is used, use the trick by Diego Perini
                    // http://javascript.nwbox.com/IEContentLoaded/
                    document.documentElement.doScroll("left");
                } catch(e) {
                    setTimeout( doScrollCheck, 1 );
                    return;
                }
    
                // and execute any waiting functions
                ReadyObj.ready();
            }
            // Cleanup functions for the document ready method
            if ( document.addEventListener ) {
                DOMContentLoaded = function() {
                    document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
                    ReadyObj.ready();
                };
    
            } else if ( document.attachEvent ) {
                DOMContentLoaded = function() {
                    // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
                    if ( document.readyState === "complete" ) {
                        document.detachEvent( "onreadystatechange", DOMContentLoaded );
                        ReadyObj.ready();
                    }
                };
            }
            function ready( fn ) {
                // Attach the listeners
                ReadyObj.bindReady();
    
                var type = ReadyObj.type( fn );
    
                // Add the callback
                readyList.done( fn );//readyList is result of _Deferred()
            }
            return ready;
            })();
    

    然后,你可以像这样使用它:

        ready(function(){
          $("body").floatingShare(); // Assuming jQuery Lib has been included as well
        });
    

    到目前为止,我认为选项 1 应该更容易接受。

    【讨论】:

      【解决方案3】:

      在您的代码中存在代码序列问题。根据 jQuery 代码序列,您必须首先在文档中包含 jQuery,然后在上述答案中包含 @Bhushan Kawadkar 建议的所有自定义函数。

      如果您仍想在已添加函数的正文中添加函数,则可以在文档的 &lt;head&gt; 中包含 jQuery,例如

      <html>
       <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
        <script src="http://www.jqueryscript.net/demo/jQuery-Plugin-For-Horizontal-Floating-Social-Share-Bar/js/jquery.floating-share.js" type="text/javascript"></script>
      </head>
      <body>
       <div class="container"> 
        <script type="text/javascript">
      $(function(){
      $("body").floatingShare();
      });
      </script> 
      </div>
      </body>
      

      你的插件将开始工作。

      建议以某种方式在页脚中添加脚本(js)以改善页面的呈现时间。

      这是给你的现场演示。

      http://codepen.io/anon/pen/AIEnl

      【讨论】:

      • 亲爱的@Jamil 我是 stackoverflow 的新手,我找不到我选择的选项 accepted :( 如果你能帮忙参考所以在评论中分享链接并再次感谢您的帮助:):)
      • @RaoAsifRaza 请按照此链接上的说明进行操作meta.stackexchange.com/questions/5234/…
      • @JamilAhmad 谢谢 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-15
      • 2016-04-28
      • 2019-01-20
      • 2018-03-30
      • 2010-09-16
      相关资源
      最近更新 更多