日记整理---->2016-11-22

  这里记录一些关于jquery的一些知识。这里面主要是$().method方法的书写框架以及jquery中each函数的使用。等待太久得来的东西,多半已经不是当初想要的样子了。

 

一、基于$().method方法的书写

一、框架的写法

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Documenttitle>
    <script type="text/javascript" src="../jquery-3.1.0.js">script>
    <script type="text/javascript" src="js/app2.js">script>
    <script type="text/javascript">
        function pageTest() {
            $("#page").paginate({
                alert: "hello world",
                onchange: function(str) {
                    alert(str);
                }
            });
        }
        function eachTest() {
            $("ul li").each(function( index ) {
            console.log( index + ": " + $(this).text() );
            });
        }
    script>
head>
<body>
    <div id="page">Hello Worlddiv>
    <button onclick="pageTest()">click me pagebutton>
    <button onclick="eachTest()">click me eachbutton>
    <ul>
      <li>fooli>
      <li>barli>
    ul>
body>
html>

 二、app2.js的代码:

(function($) {
    $.fn.paginate = function(options) {
        var opts = options;
        return this.each(function() {
            $this = $(this);
            $.fn.draw(opts, $this);
        });
    };
    $.fn.draw = function(data, obj) {
        data.onchange(data.alert);
    };
})(jQuery);

三、运行的效果如下:

  • 点击click me page按钮,弹出hello world的alert框。
  • 点击click me each按钮,控制台打印0: foo 1: bar字样。

 

 二、简单路由的实现

一、主页面的代码huhx3.html代码如下:

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Documenttitle>
    <script type="text/javascript" src="../jquery-3.1.0.js">script>
    <script type="text/javascript" src="js/app3.js">script>
head>
<body>
    <ul>  
    <li><a href="#/">首页a>li>  
    <li><a href="#/product">产品a>li>  
    <li><a href="#/server">服务a>li>  
ul>
<div id="content">div> 
body>
html>

其中测试中包含的两个碎片页如下:

  • page.html:
<div style="color: red">Hello Worlddiv>
  • product.html:
<div style="background-color: #CCCCCC; text-shadow: 2px 2px 4px red">I love you.div>

关于js的代码如下:app3.js

function load() {
    var url = window.location.href;
    // get the router
    var index = url.indexOf("#");
    var routeUrl = url.substring(index, url.length);
    alert("routeUrl: " + routeUrl);
    // 比较Router对象,加载页面
    if (routeUrl == "#/server") {
        $("#content").load("page.html");
    } else if (routeUrl == "#/product") {
        $("#content").load("product.html");
    } else {
        $("#content").load("胡红翔");
    }
}

window.addEventListener('hashchange', function() {
    load();
}, false);

二、运行效果如下:注意到url点击两次,并没有触发hashchange事件。下面我们说一下这个事件,了解这样实现的缺点。

关于,请参考博客:https://developer.mozilla.org/zh-CN/docs/DOM/Manipulating_the_browser_history

 

三、回到顶部的js代码

document.documentElement.scrollTop = document.body.scrollTop =0; // 页面回到顶部

 

四、js中动态添加脚本

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Documenttitle>
    <script type="text/javascript">
        function huhxTest() {
            var script = document.createElement( "script" );
            script.text = "function test() {alert('helelo world')}";
            document.head.appendChild(script).parentNode.removeChild(script);
        }
    script>
head>
<body>
    <button onclick="huhxTest()">click me 1button>
    <button onclick="test()">click me 2button>
body>
html>

运行效果:点击click me 1之后点击click me 2,会alert出hello world的字样。如果此时刷新,再点击click me 2,没有任何的反应。

日记整理---->2016-11-22_第1张图片

alert出hello world的代码并没有包含在页面中,而是出现在以下中。至于原因,不明。

 

五、js中函数为另一个函数的参数

function funTest(fn, name) {
    return fn(name);
}
var normalFun = function(name) {
    console.log("I love you, " + name);
    return "I love you, " + name;
}
alert(funTest(normalFun, "huhx"));

运行效果:先console出"I love you, huhx"的字样,再alert出此字样。

 

六、$().load()方法

一、使用方法如下:

$("#content").load("product.html", "", function() {
    alert("hello world");
});

 具体的load函数的代码如下:

jQuery.fn.load = function( url, params, callback ) {
    var selector, type, response,
        self = this,
        off = url.indexOf( " " );
    if ( off > -1 ) {
        selector = jQuery.trim( url.slice( off ) );
        url = url.slice( 0, off );
    }
    if ( jQuery.isFunction( params ) ) {
        callback = params;
        params = undefined;
    } else if ( params && typeof params === "object" ) {
        type = "POST";
    }
    if ( self.length > 0 ) {
        jQuery.ajax( {
            url: url,
            type: type || "GET",
            dataType: "html",
            data: params
        } ).done( function( responseText ) {
            response = arguments;
            self.html( selector ?
                jQuery( "
" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : responseText ); } ).always( callback && function( jqXHR, status ) { self.each( function() { callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); } ); } ); } return this; };

可以看到,load有三个参数。第三个callback函数不管成功与否,都会执行。第二个参数是发送请求时的数据。实质上就是根据url,发送ajax的请求,将文件返回的内容通过$().html()添加到相应的元素当中。

 

友情链接

 

转载于:https://www.cnblogs.com/huhx/p/basediary20161122.html

你可能感兴趣的:(日记整理---->2016-11-22)