JavaScript學習筆記(四)——jQuery插件開發與發布

jQuery插件就是以jQuery庫為基礎衍生出來的庫,jQuery插件的好處是封裝功能,提高了代碼的復用性,加快了開發速度,現在網絡上開源的jQuery插件非常多,隨著版本的不停迭代越來越穩定好用,在jQuery官網有許多插件:

一、插件開發基礎

1.1、$.extend

在jQuery根命名空間下直接調用的方法可以認為是jQuery的靜態方法或屬性,常常使用$.方法名來調用,使用$.extend這個靜態方法可以完成兩個功能:

1.1.1、擴展屬性或方法給jQuery

比如我們想給jQuery擴展一個用于快速向控制臺寫入日志的工具方法log,而不需要使用console.log且在沒有console.log的瀏覽器中使用其它的方法替代:

        <script src="js/jQuery1.11.3/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$.extend({log: function(message) {console.log(message);}});$.log("控制臺日志");</script>

運行結果:

1.1.2、擴展對象

            var x={a:1};var y={a:2,b:3};var z={b:4,c:5};//使用第2個及后的對象擴展前面的對象,如果有則覆蓋
            $.extend(x,y,z);$.log(x.a+","+x.b+","+x.c);

運行結果:?

除了可以擴展對象的屬性,方法也可以擴展。

1.2、$.fn.extend

$.fn就是jQuery的原型,$.fn等于jQuery.prototype,$是jQuery的別名。$.fn.extend方法的作用是用于擴展jQuery實例對象,也就是我們從頁面中獲得的jQuery對象。

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>extend</title></head><body><button>按鈕1</button><button>按鈕2</button><input type="text" value="username"/><input type="text" value="password"/><script src="js/jQuery1.11.3/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$.fn.extend({show:function(){$(this).click(function(){alert($(this).val()||$(this).html());});},log:function(){console.log($(this).val()||$(this).html());}});$("button").show();$("input[type=text]").log();</script></body></html>

運行結果:

1.3、$.fn

在上面的示例中我們通過$.fn擴展了jQuery的原型,讓所有的jQuery實例對象都得到的擴展的方法,其它也可以直接修改jQuery.prototype來實現,$.fn是jQuery.prototype的簡寫,源代碼如下:

示例代碼:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>extend</title></head><body><button id="btn1">按鈕1</button><button>按鈕2</button><input type="text" value="username"/><input type="text" value="password"/><script src="js/jQuery1.11.3/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$.fn.bgColor=function(color){this.css("background",color);}jQuery.prototype.color=function(color){this.css("color",color);}$("button,input").bgColor("lightGreen");$("button,input").color("red");</script></body>
</html>

運行結果:

二、插件開發

2.1、jQuery插件開發基本模式

jQuery插件開發的基本模式需要有一個私有作用域,javascript中默認沒有塊級作用域,一般通過閉包+IIFE模擬達到類似效果,在1.3中的示例是存在問題,因他它直接暴露在根命名空間下,可以使用如下辦法解決:

            ;(function(method) {method(window, window.document, jQuery);}(function(win, doc, $) {console.log("這是一個私有作用域,IIFE");$.fn.yourPluginName = function(options) {}}));

前置的分號是為了與插件使用前的代碼劃清界線;兩個IIFE表達式的作用是:一個為了立即執行且形成一個私有的塊級作用域,另一個是為了將后置的參數前置,方便看到IIFE執行時帶的參數。帶參數的目的是為了加快查找的速度,提升性能。

插件的命名:

當然一個好的插件應該有一個容易記住且規范的名稱,能見名知意且不與別的插件同名沖突,文件的基本命名規范如下:

jQuery.YourPluginName-1.5.js 源代碼

jQuery.YourPluginName-1.5.min.js 壓縮代碼

2.2、獲取上下文

插件方法執行范圍內可以直接通過this關鍵字得到上下文,這里的this就是一個jQuery對象,無需使用$(this)將DOM轉換成jQuery對象。

            ;(function(method) {method(window, window.document, jQuery);}(function(win, doc, $) {console.log("這是一個私有的塊級作用域,IIFE");$.fn.myPlugin = function(options) {this.css({ //this是一個jQuery對象"color": "blue"});}}));$("button").myPlugin();

運行結果:

上面的示例中是講$.fn的形式擴展,如果使用$.fn.extend情況還是一樣嗎?

            ;(function(method) {method(window, window.document, jQuery);}(function(win, doc, $) {console.log("這是一個私有的塊級作用域,IIFE");$.fn.extend({myPlugin2: function(options) {this.css({ //this是一個jQuery對象"background": "lightgreen"});}});}));$("button").myPlugin2();

運行結果:

可見$.fn與$.fn.extend兩種方法中的this都是指jQuery對象,這也符合this指向調用他的對象的原則。

2.3、第一個jQuery插件

這是一個Hello World示例,完成一個可以變長的元素插件,指定每次增加長度參數,在指定的HTML元素后增加一個加號點擊加號可以將元素加寬指定長度。

jQuery.SuperPlus-1.0.js文件內容如下:

;
(function(method) {method(window, window.document, jQuery);
}(function(win, doc, $) {$.fn.SuperPlus = function(length) {$.each(this, function(index, obj) {$("<span/>").html("+").css("cursor", "pointer").click(function() {$(obj).width($(obj).width() + length);}).insertAfter(obj);});}
}));

HTML頁面:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>jQuery插件</title></head><body><button>按鈕1</button><br /><button>按鈕2</button><br /><input type="text" value="username" /><br /><input type="text" value="password" /><script src="js/jQuery1.11.3/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script><script src="js/SuperPlus/jQuery.SuperPlus-1.0.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$("button").SuperPlus(10);$("input").SuperPlus(50);</script></body></html>

運行結果:

插件中使用each的原因是jQuery選擇器選擇的內容默認就是一個包裝集,中間有多個元素,包裝集中含有多個DOM元素,each中的元素就不再是jQuery對象而是一個DOM對象。

練習:$("#div1,#div2").superDiv(50,50,3,"blue");在div1與div2中都添加3個長50,寬50的div,設置背景色為藍色,點擊時div消失,添加的div要求橫向排列,間隔為寬高的1/10。

$("#div1,#div2").superDiv({width:50,height:50,color:"red",before:function(){},after:function(){}});

2.4、鏈式編程

幾乎在所有基于“類型”的語言中如果調用一個方法后將對象作為方法參數返回則就會形成鏈式編程,如:

        return $.each(this, function(index, obj) {$("<span/>").html("+").css("cursor", "pointer").click(function() {$(obj).width($(obj).width() + length);}).insertAfter(obj);});

上面的示例中當$.each循環完成后返回this對象,返回的仍然是一個jQuery對象,所以可以繼續jQuery編程。

$("button").SuperPlus(10).height(26).width(100).css("color","blue");

運行結果:

2.5、參數與默認值

參數是插件對外部提供的接口,靈活的參數會讓插件變得使用方便,這里主要從3個方面來講參數:

2.5.1、默認值

最好為每個參數提供默認值,有缺省的默認值會減少錯誤,如:

$("input").SuperPlus();

這樣沒有提供參數,點擊時沒有任何效果,也沒有錯誤提示,應該給參數增加一個默認值,如:

;
(function(method) {method(window, window.document, jQuery);
}(function(win, doc, $) {$.fn.SuperPlus = function(length) {length=length||3;return $.each(this, function(index, obj) {$("<span/>").html("+").css("cursor", "pointer").click(function() {$(obj).width($(obj).width() + length);}).insertAfter(obj);});}
}));

length=length||3意思是如果用戶沒有提供參數則length的值為3。

2.5.2、參數對象

上面的示例中只有一個參數,直接作為方法的參數沒有任何問題,但如果參數非常多,且都要默認值,處理就很麻煩,最好的辦法是使用參數對象:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>jQuery插件</title></head><body><button>按鈕1</button><br /><button>按鈕2</button><br /><input type="text" value="username" /><br /><input type="text" value="password" /><script src="js/jQuery1.11.3/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script><script src="js/SuperPlus/jQuery.SuperPlus-1.0.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$("button").SuperPlus({length: 100});$("input").SuperPlus({color: "red"});</script></body>
</html>

插件:

;
(function(method) {method(window, window.document, jQuery);
}(function(win, doc, $) {$.fn.SuperPlus = function(options) {//默認參數var setting={length:3,color:"blue"};//使用用戶的參數覆蓋默認參數
        $.extend(setting,options);return $.each(this, function(index, obj) {$("<span/>").html("+").css("cursor", "pointer").css("color",setting.color).click(function() {$(obj).width($(obj).width() + setting.length);}).insertAfter(obj);});}
}));

運行結果:

2.5.2、參數類型

參數對象的類型可是屬性,方法,對象,數組等多種形式,也可以使用回調方法,比如這里我們要為插件增加一個執行后的事件changeAfter,當目標元素被修改后觸發。

修改后的插件:

;
(function(method) {method(window, window.document, jQuery);
}(function(win, doc, $) {$.fn.SuperPlus = function(options) {//默認參數var setting={//每次增加的長度length:3,//加號的顏色color:"blue",//回調事件,點擊后執行changeAfter:null   };//使用用戶的參數覆蓋默認參數
        $.extend(setting,options);return $.each(this, function(index, obj) {$("<span/>").html("+").css("cursor", "pointer").css("color",setting.color).click(function() {$(obj).width($(obj).width() + setting.length);//如果用戶指定了回調事件if(setting.changeAfter){//執行用戶帶入的方法將當前對象作為參數帶出
                    setting.changeAfter($(obj));}}).insertAfter(obj);});}
}));

HTML頁面:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>jQuery插件</title></head><body><button>按鈕1</button><br /><button>按鈕2</button><br /><input type="text" value="username" /><br /><input type="text" value="password" /><script src="js/jQuery1.11.3/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script><script src="js/SuperPlus/jQuery.SuperPlus-1.0.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$("button").SuperPlus({length: 100,changeAfter:function(obj){//如果長度超過300則變成100if($(obj).width()>300){$(obj).width(100);}}});$("input").SuperPlus({color: "red"});</script></body>
</html>

運行結果:

2.6、命名空間與面向對象

給插件正確的命名空間是非常重要要的,這樣可以避免和其它插件或代碼沖突,可以使用閉包,模塊等方法實現。按照jQuery的約定,只使用一個命名空間。

在插件中盡量只使用jQuery.fn下的一個名稱,名稱越多沖突的可能性就越大,成熟的插件會做沖突處理,就像多個jQuery庫共存的道理是一樣的。

另外對于復雜的插件盡量將代碼封裝,不要使用函數式的編程方式,可以通過構造函數,IIFE,原型繼承等方法達到目的。

2.7、插件與關聯的CSS

如果插件中會使用到大量的CSS樣式,則不推薦使用jQuery的方式去添加樣式,應該做成一個插件單獨使用CSS文件,命名可以參考如下方式:

jQuery.YourPluginName-1.5.css 樣式

樣式一定要注意不要修改與插件無關的元素,甚至連CSSReset都不應該有,推薦使用一個相對不易沖突的名稱所有的樣式都在該類樣式下,注意ID樣式是不允許重復的,因為要考慮一個頁面中同時使用多個插件實例的情況。

2.8、壓縮與混淆

壓縮為是了減小插件的體積。JavaScript的速度分為兩種,下載速度和執行速度。要想JavaScript的下載速度快,就需要盡量減少JavaScript文件的大小,另外,把多個JavaScript文件合并成一個也能減少服務器的響應次數而加快網頁下載。

可以通過對javascript的變量名稱和過程名稱進行編碼,從而起到混淆JavaScript代碼的作用,保護您的勞動成果。

其實高強度壓縮就是很好的混淆,如將變量名稱都換成a,b,c等沒有意義的字符。

2.8.1、在線壓縮與混淆

網絡中有很多提供在線壓縮的工具,如果僅是少量,臨時的壓縮在線壓縮與混淆是非常方便的,如:

可以搜索“javascript在線壓縮”就會有很多網站提供在線,免費的服務。

2.8.2、工具壓縮與混淆

可以使用GUI工具也可以使用命令行,GUI工具操作非常簡單,這里主要講基于node.js的工具UglifyJS的使用。?

UglifyJS是UglifyJS2的前身,是一個Javascript開發的通用的語法分析、代碼壓縮、代碼優化的一個工具包。UglifyJS是基于Nodejs環境開發,支持CommonJS模塊系統的任意的Javascript平臺。

UglifyJS2的安裝:

npm install uglify-js -g

合并壓縮:

uglifyjs a.js b.js c.js -o d.js 

將a.js、b.js與c.js文件合并后壓縮到d.js中

混淆:

在原參數上增加-m可以將變量名稱替換成a,b,c等沒有意義的變量。

壓縮的辦法有多個還可以使用IDE中的插件:

命令參數詳細:

–source-map [string],生成source map文件。
–source-map-root [string], 指定生成source map的源文件位置。
–source-map-url [string], 指定source map的網站訪問地址。
–source-map-include-sources,設置源文件被包含到source map中。
–in-source-map,自定義source map,用于其他工具生成的source map。
–screw-ie8, 用于生成完全兼容IE6-8的代碼。
–expr, 解析一個表達式或JSON。
-p, –prefix [string], 跳過原始文件名的前綴部分,用于指定源文件、source map和輸出文件的相對路徑。
-o, –output [string], 輸出到文件。
-b, –beautify [string], 輸出帶格式化的文件。
-m, –mangle [string], 輸出變量名替換后的文件。
-r, –reserved [string], 保留變量名,排除mangle過程。
-c, –compress [string], 輸出壓縮后的文件。
-d, –define [string], 全局定義。
-e, –enclose [string], 把所有代碼合并到一個函數中,并提供一個可配置的參數列表。
–comments [string], 增加注釋參數,如@license、@preserve。
–preamble [string], 增加注釋描述。
–stats, 顯示運行狀態。
–acorn, 用Acorn做解析。
–spidermonkey, 解析SpiderMonkey格式的文件,如JSON。
–self, 把UglifyJS2做為依賴庫一起打包。
–wrap, 把所有代碼合并到一個函數中。
–export-all, 和–wrap一起使用,自動輸出到全局環境。
–lint, 顯示環境的異常信息。
-v, –verbose, 打印運行日志詳細。
-V, –version, 打印版本號。
–noerr, 忽略錯誤命令行參數。

2.9、發布插件

2.9.1、將插件發布到GitHub上
首先你需要將插件代碼放到GitHub上創建一個Service Hook,這樣做的目的是你以后更新的插件后,jQuery可以自動去獲取新版本的信息然后展示在插件中心的頁面上。

先在github上創建一個倉庫:

將插件提交到GitHub中:

2)、制作清單文件

然后需要制作一個JSON格式的清單文件,其中包括關于插件的基本信息,具體格式及參數可以在jQuery官網插件發布指南頁面了解到,這里提供一個示例文件,是我之前寫的一個jQuery插件SlipHover

這里參考jQuery官網的設置指南:http://plugins.jquery.com/docs/publish/

The jQuery Plugins Registry will look in the root level of your repository for any files named?*.jquery.json. You will want to create?*yourplugin*.jquery.json?according to the?package manifest specification. Use an online JSON verifier such as?JSONlint?to make sure the file is valid. You are now ready to publish your plugin!

在插件項目的根目錄下添加一個名稱為“插件名.jquery.json”的清單文件;清單文件可以參考package manifest specification,清單文件是一個json格式的文件,編寫好之后可以使用JSONlint驗證格式,確保沒有錯誤。

SuperPlus.jquery.json

{"name": "SuperPlus","title": "jQuery SuperPlus","description": "jQuery plugin for HTML Element.","keywords": ["super","plus","element"],"version": "1.0.0","author": {"name": "South IT College class NO1 of UED","url": "https://github.com/zhangguo5/SuperPlus/blob/master/AUTHORS.txt"},"maintainers": [{"name": "South IT College class NO1 of UED","email": "2676656856@qq.com","url": "http://best.cnblogs.com"}],"licenses": [{"type": "MIT","url": "https://github.com/jquery/jquery-color/blob/2.1.2/MIT-LICENSE.txt"}],"bugs": "https://github.com/zhangguo5/SuperPlus/issues","homepage": "https://github.com/zhangguo5/SuperPlus","docs": "https://github.com/zhangguo5/SuperPlus","download": "https://github.com/zhangguo5/SuperPlus/tree/master/dest","dependencies": {"jquery": ">=1.5"}
}

編輯完成清單文件可以在線驗證:

2.9.2、GitHub Service Hook

1)、在項目的根目錄下,點擊右上角的設置“settings”->"Integrations&services"

2)、在Add Service中輸入jQuery Plugin

接下來會提示登錄,輸入密碼,登錄成功后激活就完成。

搜索:

練習:

請打造一個屬于自己的jQuery插件,并發布到github中,寫出使用的幫助說明。插件類型可以是:彈出層、分頁控件、驗證、圖片輪播、組織結構圖、超級下拉列表、圖表、工具庫等。

彈出層參考:

http://www.jq22.com/yanshi10917

http://www.jq22.com/jquery-info10177

http://www.jq22.com/jquery-plugins%E5%BC%B9%E5%87%BA%E5%B1%82-1-jq

分頁控件:

https://github.com/gbirke/jquery_pagination

簡單參考:

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>jQuery插件</title><style type="text/css">.pager {width: 800px;margin: 0 auto;}.pager .pageItem {display: inline-block;padding: 5px 8px;background: dodgerblue;margin: 3px;}.pager a {color: white;text-decoration: none;}.pager a:hover {background: orangered;}</style></head><body><div id="div1"></div><div id="div2"></div><div id="div3"></div><script src="js/jQuery1.11.3/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script><script src="js/SuperPlus/jQuery.SuperPlus-1.0.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$.fn.superPager = function(options) {var settings = {total: 100,record: 10,callback: null};$.extend(settings, options);var pager = $("<div/>").addClass("pager").appendTo(this);for(var i = 1; i <= Math.ceil(settings.total / settings.record); i++) {$("<a href='#'/>").html(i).addClass("pageItem").click(function(p) {return function() {if(settings.callback) {settings.callback(settings, p);}return false;};}(i)).appendTo(pager);}return this;}$("#div1").superPager({callback: function(opt, index) {alert(opt.total + "" + opt.record + "" + index);}});$("#div2").superPager({total:300,record:20,callback: function(opt, index) {alert(opt.total + "" + opt.record + "" + index);}});$("#div3").superPager({total:10,record:2,callback: function(opt, index) {alert(opt.total + "" + opt.record + "" + index);}});</script></body></html>
View Code

?

驗證:

https://jqueryvalidation.org/

http://www.jq22.com/jquery-plugins%E9%AA%8C%E8%AF%81-1-jq

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>jQuery插件</title><style type="text/css">.error {color: red;}</style></head><body><form action="" method="post" id="form1"><p>名稱:<input type="text" required="required"  data-regex="^[\u4e00-\u9fa5]{2,10}$" data-regexmsg="只允許輸入2-10位的中文" data-msg="名稱必須填寫"/></p><p>價格:<input type="text" required="required" data-regex="^\d{1,5}$"/></p><p>詳細:<input type="text" required="required" /></p><input type="submit" value="提交" /></form><script src="js/jQuery1.11.3/jquery-1.11.3.min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">$.fn.superVerify = function() {this.find("[required=required]").each(function(index, obj) {var msg = $(this).data("msg") || "請填寫該字段";var fun=function(){$(this).next("span.error").remove();if(!$(this).val()){$("<span/>").html(msg).addClass("error").insertAfter(this);}}$(this).change(fun).focus(fun).blur(fun);});this.find("[data-regex]").each(function(index, obj) {var msg = $(obj).data("regexmsg") || "格式錯誤";var fun=function(){$(obj).next("span.error").remove();var exp=new RegExp($(obj).data("regex"));console.log(exp+","+$(obj).data("regex"));console.log(exp.test($(this).val()));console.log($(this).val());if($(this).val()&&!exp.test($(this).val())){$("<span/>").html(msg).addClass("error").insertAfter(this);}}$(this).change(fun).focus(fun).blur(fun);});return this;}$("#form1").superVerify();//var reg=new RegExp("^\\d{1,5}$");//alert(reg.test("123123"));</script></body></html>
View Code

?

圖片輪播:

比如:

            <div id="adv"><a href="x.html"><img src="p1.jpg"/></a><a href="y.html"><img src="p2.jpg"/></a><a href="z.html"><img src="p3.jpg"/></a></div>
            $("#adv").superSwaper({speed:3000});

?

超級下拉列表

$("#select1").superSelect(["中國","美國","日本"]);?

$("#select1").superSelect({data:[{"text":"中國","value":"01"},{"text":"美國","value":"02"},{"text":"日本 ","value":"03"}]});?

$("#select1").superSelect({url:"service/getAllCountry.do","text":"text","value":"id"});

$("#select1").superSelect({data:"省"});

$("#select1").superSelect({data:"學歷"});

$("#select1").superSelect({data:"性別"});

http://www.jq22.com/

三、示例下載

https://github.com/zhangguo5/javascript004.git

參照:http://www.cnblogs.com/best

轉載于:https://www.cnblogs.com/SeeYouBug/p/6246670.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456571.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456571.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AIML元素詳細說明

目錄前言&#xff1a;1、簡介2、詳細說明總結&#xff1a; 目錄 前言&#xff1a; 智能客服客戶咨詢功能的實現主要依靠的就是Python的AIML庫&#xff0c;這里就先介紹下AIML。 詳細的使用教程可參考&#xff1a;https://github.com/andelf/PyAIML 目前大部分AIML只支持Py…

【解決】如何打開.ipynb文件

最近碰到文件名后綴為.ipynb文件&#xff0c;起初沒太在意這種文件格式&#xff0c;用Notepad打開之后看到也是類似于JSON格式的信息&#xff0c;以為也是為其他的一些文件服務的&#xff08;類似于配置一些HTML文件的配置文件&#xff09;。但是后來才發現這也是一種文本表示形…

《樹莓派學習指南(基于Linux)》——1.4 將Raspbian燒錄到SD卡

本節書摘來異步社區《樹莓派學習指南&#xff08;基于Linux&#xff09;》一書中的第1章&#xff0c;第1.4節&#xff0c;作者&#xff1a;【英】Peter Membrey ,【澳】David Hows &#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看 1.4 將Raspbian燒錄到SD卡 …

python單向鏈表和雙向鏈表的圖示代碼說明

圖示說明&#xff1a; 單向鏈表&#xff1a; insert、 remove、 update、pop方法 class Node:def __init__(self, data):self.data dataself.next Nonedef __str__(self):return str(self.data)# 通過單鏈表構建一個list的結構&#xff1a; 添加 刪除 插入 查找 獲取長…

不使用Ajax,如何實現表單提交不刷新頁面

不使用Ajax&#xff0c;如何實現表單提交不刷新頁面&#xff1f; 目前&#xff0c;我想到的是使用<iframe>&#xff0c;如果有其他的方式&#xff0c;后續再補。舉個栗子&#xff1a; 在表單上傳文件的時候必須設置enctype"multipart/form-data"表示表單既有文…

AIML知識庫數據匹配原理解析

目錄&#xff1a;前言&#xff1a;1、AIML系統工作流程2、AIML的核心推理機制3、推理舉例4、匹配規則及實踐中遇到的一些問題的解釋總結&#xff1a; 目錄&#xff1a; 前言&#xff1a; 參考&#xff1a;《Alice機理分析與應用研究》 關于AIML庫這里就不介紹了&#xff0c…

【Python】模擬面試技術面試題答

一、 python語法 1. 請說一下你對迭代器和生成器的區別&#xff1f; 2. 什么是線程安全&#xff1f; 3. 你所遵循的代碼規范是什么&#xff1f;請舉例說明其要求&#xff1f; 4. Python中怎么簡單的實現列表去重&#xff1f; 5. python 中 yield 的用法…

ROS機器人程序設計(原書第2版)2.3 理解ROS開源社區級

2.3 理解ROS開源社區級 ROS開源社區級的概念主要是ROS資源&#xff0c;其能夠通過獨立的網絡社區分享軟件和知識。這些資源包括&#xff1a; 發行版&#xff08;Distribution&#xff09; ROS發行版是可以獨立安裝、帶有版本號的一系列綜合功能包。ROS發行版像Linux發行版一樣…

Win7 U盤安裝Ubuntu16.04 雙系統

Win7系統下安裝Ubuntu系統&#xff0c;主要分為三步&#xff1a; 第1步&#xff1a;制作U盤啟動盤 第2步&#xff1a;安裝Ubuntu系統 第3步&#xff1a;創建啟動系統引導 第1步&#xff1a;制作U盤啟動盤 1.下載Ubuntu16.04安裝鏡像&#xff0c;官網地址&#xff1a;http://www…

Word2VecDoc2Vec總結

轉自&#xff1a;http://www.cnblogs.com/maybe2030/p/5427148.html 目錄&#xff1a;1、詞向量2、Distributed representation詞向量表示3、word2vec算法思想4、doc2vec算法思想5、Doc2Vec主要參數詳解總結&#xff1a; 目錄&#xff1a; 1、詞向量 自然語言理解的問題要轉…

ubantu安裝pycharm破解+Linux基礎簡介

一、課程簡介 linux服務器配置及常用命令 Ubuntu centos 開發軟件配置及服務環境的搭建 軟件的安裝和配置 mysql數據庫使用、monDB使用、redius的使用 git的使用 html/css 課程學習方式 表達訓練 學習方法&#xff1a; linux學習基本上都是命令和配置 命令要多敲多記 …

《游戲視頻主播手冊》——2.2 哪些人適合做游戲主播

本節書摘來自異步社區《游戲視頻主播手冊》一書中的第2章&#xff0c;第2.2節&#xff0c;作者 王巖&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 2.2 哪些人適合做游戲主播 據不完全統計&#xff0c;目前國內有超過26000名活躍的游戲主播。所謂“活躍的…

Doc2Vec實踐

目錄:前言&#xff1a;第一步&#xff1a;首先我們需要拿到對應的數據&#xff0c;相關的代碼如下&#xff1a;第二步&#xff1a;拿到對應的數據后&#xff0c;就開始訓練數據生成對應的model&#xff0c;對應的代碼如下&#xff1a;第三步&#xff1a;得到生成的model后&…

Linux常用命令全網最全

一、linux文件系統結構 sudo apt-get install treetree --help #查看幫助tree -L 1 #顯示文件目錄 rootubuntu16 /# tree -L 1 . #系統根目錄&#xff0c;有且只有一個根目錄 ├── bin #存放常見的命令 ├── boot #系統啟動文件和核心文件都在這個目錄…

《開源思索集》一Source Code + X

本節書摘來異步社區《開源思索集》一書中的第1章&#xff0c;作者&#xff1a; 莊表偉 責編&#xff1a; 楊海玲, 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。 Source Code X 開源思索集最近&#xff0c;有一位來自學術界朋友&#xff0c;找到了我們這個開源的圈子…

機器學習中目標函數、損失函數以及正則項的通俗解釋

目錄&#xff1a;前言&#xff1a;1、什么是目標函數&#xff1f;2、損失函數3、正則化總結&#xff1a; 目錄&#xff1a; 前言&#xff1a; 今天看到一篇很精簡的文章來說明目標函數、損失函數以及正則項是什么。以下是文章正文。 轉自&#xff1a;https://xiaozhuanlan.…

Linux中的 硬鏈接ln和軟連接ln -s

文件都有文件名與數據&#xff0c;這在 Linux 上被分成兩個部分&#xff1a;用戶數據 (user data) 與元數據 (metadata)。用戶數據&#xff0c;即文件數據塊 (data block)&#xff0c;數據塊是記錄文件真實內容的地方&#xff1b;而元數據則是文件的附加屬性&#xff0c;如文件…

干貨分享!DevExpressv16.2最新版演示示例等你來收!(上)

2019獨角獸企業重金招聘Python工程師標準>>> 為解決大家找資源難的問題&#xff0c;EVGET聯合DevExpress控件中文網盤點熱門的DevExpress資訊、Demo示例、版本升級及下載&#xff0c;以及各種教程推薦等。更多下載及資訊也可以在DevExpress控件中文網中找到&#xf…

一文看懂哈夫曼樹與哈夫曼編碼

轉自&#xff1a;http://www.cnblogs.com/Jezze/archive/2011/12/23/2299884.html 在一般的數據結構的書中&#xff0c;樹的那章后面&#xff0c;著者一般都會介紹一下哈夫曼(HUFFMAN)樹和哈夫曼編碼。哈夫曼編碼是哈夫曼樹的一個應用。哈夫曼編碼應用廣泛&#xff0c;如JPEG中…

解決:未能將管道連接到虛擬機: 所有的管道范例都在使用中。

虛擬機無端出現: VMware Workstation 無法連接到虛擬機。請確保您有權限運行該程序、訪問改程序使用的所有目錄以及訪問所有臨時文件目錄。未能將管道連接到虛擬機: 所有的管道范例都在使用中。 原因&#xff1a;Ubuntu開機慢到開不開&#xff0c;我就在任務管理器強制結束了…