導航:首頁 > 編程語言 > jquery編程題

jquery編程題

發布時間:2023-03-16 01:31:18

❶ 在jquery中想要實現通過運程hettp get請求載入信息功能的是下面哪個事件

jQuery是dom驅動,AngularJS是數據驅動,這里有一篇文章闡述的非常好,建議看看

本文來自StackOverFlow上How do I 「think in AngularJS」 if I have a jQuery background?一題中得票最高的回答。該回答得票超過3000次,回答者Josh David Miller是活躍於開源社區的開發者,也是Emergenesis公司的聯合創始人。該答案最初由數雲架構師韓錚翻譯並發布在自己的博客上,在徵得Josh同意後由韓錚本人推薦給 InfoQ進行分享,並在經過InfoQ社區編輯崔康審校後發布在此。
1. 不要先設計頁面,然後再使用DOM操作來改變它的展現
在jQuery中,你通常會設計一個頁面,然後再給它動態效果。這是因為jQuery的設計就是為了擴充DOM並在這個簡單的前提下瘋狂的生長的。
但是在AngularJS里,必須從頭開始就枝悄在頭腦中思考架構。必須從你想要完成的功能開始,然後設計應用程序,最後敬森來設計視圖,而非「我有這么一個DOM片段,我想讓他可以實現XXX效果」。
2. 不要用AngularJS來加強jQuery
類似的,不要以這樣的思維開始:用jQuery來做X,Y和Z,然後只需要把AngularJS的models和亮搭畝controllers加在這上面。這在剛開始的時候顯得非常誘人,這也是為什麼我總是建議AngularJS的新手完全不使用jQuery,至少不要在習慣使用「Angular Way」開發之前這么做。
我在郵件列表裡看到很多開發者使用150或200行代碼的jQuery插件創造出這些復雜的解決方案,然後使用一堆callback函數以及$apply把它粘合到AngularJS里,看起來復雜難懂;但是他們最終還是把它搞定了!問題是在大多數情況下這些jQuery插件可以使用很少的AngularJS代碼重寫,而且所有的一切都很簡單直接容易理解。
這里的底線是:當你選擇解決方案時,首先「think in AngularJS」;如果想不出一個解決方案,去社區求助;如果還是沒有簡單的解決方案,再考慮使用jQuery。但是不要讓jQuery成為你的拐杖,導致你永遠無法真正掌握AngularJS。
3. 總是以架構的角度思考
首先要知道Single-page應用是應用,不是網頁。所以我們除了像一個客戶端開發者般思考外,還需要像一個伺服器端開發者一樣思考。我們必須考慮如何把我們的應用分割成獨立的,可擴展且可測試的組件。
那麼如何做到呢?如何「think in AngularJS」?這里有一些基本原則,對比jQuery。
視圖是「Official Record」
在jQuery里,我們編程改變視圖。我們會將一個下拉菜單定義為一個ul :
<ul class="main-menu">
<li class="active"> <a href="#/home">Home</a> </li>
<li> <a href="#/menu1">Menu 1</a>
<ul>
<li><a href="#/sm1">Submenu 1</a></li>
<li><a href="#/sm2">Submenu 2</a></li>
<li><a href="#/sm3">Submenu 3</a></li>
</ul>
</li>
<li> <a href="#/home">Menu 2</a> </li>
</ul>

在jQuery里,我們會在應用邏輯里這樣啟用這個下拉菜單:
$('.main-menu').dropdownMenu();

當我們只關注視圖,這里不會立即明顯的體現出任何(業務)功能。對於小型應用,這沒什麼不妥。但是在規模較大的應用中,事情就會變得難以理解且難以維護。
而在AngularJS里,視圖是基於視圖的功能。ul聲明就會像這樣:
<ul class="main-menu" dropdown-menu> ... </ul>

這兩種方式做了同樣的東西,但是在AngularJS的版本里任何人看到這個模版都可以知道將會發生什麼事。不論何時一個新成員加入開發團隊,他看到這個就會知道有一個叫做dropdownMenu的directive作用在這個標簽上;他不需要靠直覺去猜測代碼的功能或者去看任何代碼。視圖本身告訴我們會發生什麼事。清晰多了。
首次接觸AngularJS的開發者通常會問這樣一個問題:如何找到所有的某類元素然後給它們加上一個directive。但當我們告訴他:別這么做時,他總會顯得非常的驚愕。而不這么做的原因是這是一種半jQuery半AngularJS的方式,這么做不好。這里的問題在於開發者嘗試在 AngularJS的環境里「do jQuery」。這么做總會有一些問題。視圖是official record(譯者註:作者可能想表達視圖是一等公民)。在一個directive外,絕不要改變DOM。所有的directive都應用在試圖上,意圖非常清晰。
記住:不要設計,然後寫標簽。你需要架構,然後設計。
數據綁定
這是到現在為止最酷的AngularJS特性。這個特性使得前面提到的很多DOM操作都顯得不再需要。AngularJS會自動更新視圖,所以你自己不用這么做!在jQuery里,我們響應事件然後更新內容,就像這樣:
$.ajax({
url: '/myEndpoint.json',
success: function ( data, status ) {
$('ul#log').append('<li>Data Received!</li>');
}
});

對應的視圖:
<ul class="messages" id="log"> </ul>

除了要考慮多個方面,我們也會遇到前面視圖中的問題。但是更重要的是,需要手動引用並更新一個DOM節點。如果我們想要刪除一個log條目,也需要針對DOM編碼。那麼如何脫離DOM來測試這個邏輯?如果想要改變展現形式怎麼辦?
這有一點凌亂瑣碎。但是在AngularJS里,可以這樣來實現:
$http('/myEndpoint.json').then(function (response) {
$scope.log.push({
msg: 'Data Received!'
});
});

視圖看起來是這個樣子的:
<ul class="messages"> <li ng-repeat="entry in log"></li> </ul>

但是其實還可以這樣來做:
<div class="messages"> <div class="alert" ng-repeat="entry in log"> </div> </div>

現在如果我們想使用Bootstrap的alert boxes,而不是一個無序列表,根本不需要改變任何的controller代碼!更重要的是,不論log在何處或如何被更新,視圖便會隨之更新。自動的。巧妙!
盡管我沒有在這里展示,數據綁定其實是雙向的。所以這些log信息在視圖里也可以是可編輯的。只需要這么做:
<input ng-model="entry.msg" />

。簡單快樂。
清晰的模型(Model)層
在jQuery里,DOM在一定程度上扮演了模型的角色。但在AngularJS中,我們有一個獨立的模型層可以靈活的管理。完全與視圖獨立。這有助於上述的數據綁定,維護了關注點的分離(獨立的考慮視圖和模型),並且引入了更好的可測性。後面還會提到這點。
關注點分離
上面所有的內容都與這個願景相關:保持你的關注點分離。視圖負責展現將要發生的事情;模型表現數據;有一個service層來實現可復用的任務;在 directive裡面進行DOM操作和擴展;使用controller來把上面的東西粘合起來。這在其他的答案里也有敘述,我在這里只增加關於可測試性的內容,在後面的一個段落里詳述。
依賴注入
依賴注入幫我們實現了關注點分離。如果你來自一個伺服器語言(javaphp),可能對這個概念已經非常熟悉,但是如果你是一個來自jQuery的客戶端開發者,這個概念可能看起來有點傻而多餘。但其實不是的。。。
大體來講,DI意味著可以非常自由的聲明組件,然後在另一個組件里,只需要請求一個該組件的實例,就可以得到它。不需要知道(關心)載入順序,或者文件位置,或類似的事情。這種強大可能不會立刻顯現,但是我只提供一個(常見。。)的例子:測試。
就說在你的應用里,我們需要一個服務通過REST API來實現伺服器端存儲,並且根據不同的應用狀態,也有可能使用(客戶端)本地存儲。當我們運行controller的測試時,不希望必須和伺服器交互 —— 畢竟是在測試controller邏輯。我們可以只添加一個與本來使用的service同名的mock service,injector會確保controller自動得到假的那個service —— controller不會也不需要知道有什麼不同。
說起測試……
4. 總是 —— 測試驅動開發
這其實是關於架構的第3節。但是它太重要了,所以我把它單獨拿出來作為一個頂級段落。
在所有那些你見過,用過或寫過的jQuery插件中,有多少是有測試集的?不多,因為jQuery經不起測試的考驗。但是AngularJS可以。
在jQuery中,唯一的測試方式通常是獨立地創建附帶sample/demo頁面的組件,然後我們的測試在這個頁面上做DOM操作。所以我們必須獨立的開發一個組件,然後集成到應用里。多不方便!在使用jQuery開發時,太多的時間,我們挑選迭代而非測試驅動開發。誰又能責怪我們呢?
但是因為有了關注點分離,我們可以在AngularJS中迭代地做測試驅動開發!例如,想要一個超級簡單的directive來展現我們的當前路徑。可以在視圖里聲明:
<a href="/hello" when-active>Hello</a>

OK,現在可以寫一個測試:
it('should add "active" when the route changes', inject(function () {
var elm = $compile('<a href="/hello" when-active>Hello</a>')($scope);
$location.path('/not-matching');
expect(elm.hasClass('active')).toBeFalsey();
$location.path('/hello');
expect(elm.hasClass('active')).toBeTruthy();
}));

執行這個測試來確認它是失敗的。然後我們可以開始寫這個directive了:
.directive('whenActive', function ($location) {
return {
scope: true,
link: function (scope, element, attrs) {
scope.$on('$routeChangeSuccess', function () {
if ($location.path() == element.attr('href')) {
element.addClass('active');
} else {
element.removeClass('active');
}
});
}
};
});

測試現在通過了,然後我們的menu按照請求的方式執行。開發過程既是迭代的也是測試驅動的。太酷了。
5. 概念上,Directives並不是打包的jQuery
你經常會聽到「只在directive里做DOM操作」。這是必需的。請給它應有的尊重!
但讓我們再深入一點……
一些directive僅僅裝飾了視圖中已經存在的東西(想想ngClass)並且因此有時候僅僅直接做完DOM操作然後就完事了。但是如果一個 directive像一個「widget」並且有一個模版,那麼它也要做到關注點分離。也就是說,模版本身也應該很大程度上與其link和 controller實現保持獨立。
AngularJS擁有一整套工具使這個過程非常簡單;有了ngClass我們可以動態地更新class;ngBind使得我們可以做雙向數據綁定。ngShow和ngHide可編程地展示和隱藏一個元素;以及更多地 —— 包括那些我們自己寫的。換句話說,我們可以做到任何DOM操作能實現的特性。DOM操作越少,directive就越容易測試,也越容易給它們添加樣式,在未來也越容易擁抱變化,並且更加的可復用和發布。
我見過很多AngularJS新手,把一堆jQuery扔到directive里。換句話說,他們認為「因為不能在controller里做DOM操作,就把那些代碼弄到directive里好了」。雖然這么做確實好一些,但是依然是錯誤的。
回想一下我們在第3節里寫的那個logger。即使要把它放在一個directive里,我們依然希望用「Angular Way」來做。它依然沒有任何DOM操作!有很多時候DOM操作是必要的,但其實比你想的要少得多!在應用里的任何地方做DOM操作之前,問問你自己是不是真的需要這么做。有可能有更好的方式。
這里有一個示例,展示出了我見過最多的一種模式。我們想做一個可以toggle的按鈕。(注意:這個例子有一點牽強、啰嗦,這是為了表達出使用同樣方式處理問題的更復雜的情況。)
.directive('myDirective', function () {
return {
template: '<a class="btn">Toggle me!</a>',
link: function (scope, element, attrs) {
var on = false;
$(element).click(function () {
if (on) {
$(element).removeClass('active');
} else {
$(element).addClass('active');
}
on = !on;
});
}
};
});

這里有一些錯誤的地方。首先,jQeury根本沒必要出現。我們在這里做的事情都根本用不著jQuery!其次,即使已經將jQuery用在了頁面上,也沒有理由用在這里。第三,即使假設這個directive依賴jQuery來工作,jqLite(angular.element)在載入後總會使用jQuery!所以我們沒必要使用$ —— 用angular.element就夠了。第四,和第三條緊密關聯,jqLite元素不需要被$封裝 —— 傳到link里的元素本來就會是一個jQuery元素!第五,我們在前面段落中說過,為什麼要把模版的東西混到邏輯里?
這個directive可以(即使是更復雜的情況下!)寫得更簡單:
.directive('myDirective', function () {
return {
scope: true,
template: '<a class="btn" ng-class="{active: on}" ng-click="toggle()">Toggle me!</a>',
link: function (scope, element, attrs) {
scope.on = false;
scope.toggle = function () {
scope.on = !$scope.on;
};
}
};
});

再一次地,模版就在模版里,當有樣式需求時,你(或你的用戶)可以輕松的換掉它,不用去碰邏輯。重用性 —— boom!
當然還有其他的好處,像測試 —— 很簡單!不論模版中有什麼,directive的內部API從來不會被碰到,所以重構也很容易。可以不碰directive就做到任意改變模版。不論你怎麼改,測試總是通過的。
所以如果directive不僅僅是一組類似jQuery的函數,那他們是什麼?Directive實際是HTML的擴展。如果HTML沒有做你需要它做的事情,你就寫一個directive來實現,然後就像使用HTML一樣使用它。
換句話說,如果AngularJS庫沒有做的一些事情,想想開發團隊會如何完成它來配合ngClick,ngClass等。
總結
不要用jQuery。連include也不要。它會讓你停滯不前。如果遇到一個你認為已經知道如何使用jQuery來解決的問題,在使用$之前,試試想想如何在AngularJS的限制下解決它。如果你不知道,問!20次中的19次,最好的方式不需要jQuery。如果嘗試使用jQuery會增加你的工作量。
這是我目前最長的Stack Overflow回答。事實上,這個答案太長了,我都要填一個Captcha了。但是就如我常說的:能說多時候說的少其實就是懶。
希望這個答案對你有用。

❷ JS/JQuery面試題

伺服器環境下的css,js文件更改後調用需要清一下緩存,不然瀏覽器用的還是之前的文件

❸ Jquery的問題

把你的jquery的ajax寫成一個function
然後用setInterval設置定時器反復調用
setInterval(參數1,參數2)
參數1:橋判肢執行的code,此處只要寫上你的function,字元串形式,也就是說要加上『』號
參數2:執行的間隔時間,單位毫秒沖亮
eg:
val
myInterval
= setInterval("myAjax()",
2000);
清除這個敏世定時器:clearInterval(myInterval);

❹ 二,填空題(共4題,每題2分) 1,在JQuery中,需要選取<P>元素里所有的<a>元素,下列

  1. $("p a")

  2. $("").after()

  3. li:nth-child(6)

  4. $("p").html("") //html後的()給空埋汪字元讓數

    我能想到的就這些,不知道是不坦液首是正確

❺ 使用jQuery編程實現:編寫一個用戶注冊頁面,需要輸入用戶名和輸入2次密碼,在點擊「注冊」按鈕時

<script type="text/javascript">
//循環獲取所橋塵有的input框
//定義全局變數
var NI=false;
var US=false;
var PS=false;
var RPS=false;
var EM=false;
var PH=false;
//給每個input綁定獲取焦點事件
//昵稱
$('銀純input[name="nickname"]').focus(function(){
$(this).next().css({color:'#979898',display:'block'});
$(this).next().html('請輸入常用昵稱');

});
//賬戶
$('input[name="username"]').focus(function(){
$(this).next().css({color:'#979898',display:'block'});
$(this).next().html('請輸入6-16個字元,首字元不能為數字');

});
//密碼
$('input[name="password"]').focus(function(){
$(this).next().css({color:'#979898',display:'block'});
$(this).next().html('請輸入6-16個字元,首字元不能為數字');

});
//重復密碼
$('input[name="repassword"]').focus(function(){
$(this).next().css({color:'#979898',display:'block'});
$(this).next().html('請再次輸入密碼');

});
//郵箱
$('input[name="email"]').focus(function(){
$(this).next().css({color:'#979898',display:'block'});
$(this).next().html('請輸入常用昵稱'鋒消咐);

});
//電話
$('input[name="phone"]').focus(function(){
$(this).next().css({color:'#979898',display:'block'});
$(this).next().html('請輸入常用手機號碼');

});
//給每個input綁定喪失焦點事件
//昵稱
$('input[name="nickname"]').blur(function(){
var v=$(this).val();
var reg=/^.{1,16}$/;
if(!reg.test(v)){
$(this).next().html('✘輸入有誤,請重新輸入');
$(this).next().css('color','red');
}else{
$(this).next().html('✔');
$(this).next().css('color','green');
NI=true;
}
});
//賬戶
$('input[name="username"]').blur(function(){
var v=$(this).val();
var input=$(this);
var reg=/^\w{6,16}$/;
if(!reg.test(v)){
input.next().html('✘輸入有誤,請重新輸入');
input.next().css('color','red');
}else{
//發送ajax判斷賬戶是否可用
$.post('{:U("Admin/Admin/select")}',{username:v},function(data){
if(data==0){
input.next().html('✘用戶名已存在');
input.next().css('color','red');
}else{
input.next().html('✔');
input.next().css('color','green');
US=true;
}
});
}
});
//密碼
$('input[name="password"]').blur(function(){
var v=$(this).val();
var reg=/^[a-zA-Z]{1}\w{5,15}$/;
if(!reg.test(v)){
$(this).next().html('✘輸入有誤,請重新輸入');
$(this).next().css('color','red');
}else{
$(this).next().html('✔');
$(this).next().css('color','green');
PS=true;
}
});
//重復密碼
$('input[name="repassword"]').blur(function(){
var rv=$(this).val();
var v=$('input[name=password]').val();
if(rv !== v){
$(this).next().html('✘重復密碼輸入有誤');
$(this).next().css('color','red');
}else{
$(this).next().html('✔');
$(this).next().css('color','green');
RPS=true;
}
});
//郵箱
$('input[name=email]').blur(function(){
var v=$(this).val();
var reg = /^\w+@\w+\.(com|cn|com\.cn|org|hk|e|net)$/;
if(!reg.test(v)){
$(this).next().html('✘輸入有誤,請重新輸入');
$(this).next().css('color','red');
}else{
$(this).next().html('✔');
$(this).next().css('color','green');
EM=true;
}
});
//電話
$('input[name=phone]').blur(function(){
var v=$(this).val();
var reg=/^1\d{10}$/;
if(!reg.test(v)){
$(this).next().html('✘輸入有誤,請重新輸入');
$(this).next().css('color','red');
}else{
$(this).next().html('✔');
$(this).next().css('color','green');
PH=true;
}
});
//綁定表單提交事件
$('button[name=Submit]').click(function(){
//alert('dasd');
$("input").each(function(){
$(this).next().css('display','block'); //循環讓每個input框後面的span顯示出來
});
//觸發喪失焦點事件
$('input[name=nickname]').trigger('blur');
$('input[name=username]').trigger('blur');
$('input[name=password]').trigger('blur');
$('input[name=repassword]').trigger('blur');
$('input[name=email]').trigger('blur');
$('input[name=phone]').trigger('blur');
if(NI && US && PS && RPS && EM && PH){
return true;
}

return false;
});
</script>

❻ jquery簡單問題

當然需要加空格,class=hide的元棗臘茄素是ex的後代元素,jq選擇器 .ex .hide(有空格)意思在匹配.ex的後代元素滿足.hide的元素。
至於不報錯是沒局返有空格的時候也凳察可以選擇,類似這種
<div class="test"><span class="test"></span></div>
<div class="xx"></div>
$("div.test") 就可以選擇到上一個div元素,而帶空格了選擇的就是span元素了

❼ jquery練習題添加水果

TEST$(document).ready(function(e){$(":button"孫神).click(function(event) {val = $("#content").val();$(".fruit").append("跡凱槐"+val+"");});});你最喜歡的姿友水果是? 蘋果 橘子 菠蘿

❽ JQuery的題目,求大神解答

result={name:"Tom",age:27,sex:"boy", email:"[email protected]"}

❾ JQuery簡單的問題

jquery的自定義函數慎寬,如:
jQuery.fn.setApDiv=function () {
//apDiv浮寬族亮動層顯示穗胡位置居中控制
var wheight=$(window).height();
var wwidth=$(window).width();
var apHeight=wheight-$("#apDiv").height();
var apWidth=wwidth-$("#apDiv").width();
$("#apDiv").css("top",apHeight/2);
$("#apDiv").css("left",apWidth/2);
}
調用方法:$("#apDiv").setApDiv();

❿ JQUERY 測試題

你好!

你的這個問題屬於jQuery擴展函數的范圍吧。
對你貼出的代碼進行了整理,如下:

(function($){
var testVar1 = 1;
var testVar2 = 2;
var testVar3 = 3;
var testVar4 = 4;
var testVar5 = 5;
//============>>之前貼出的代碼應該凱枯是前面少了function關鍵字的
function function1(){ alert("方法"+testVar1); };
function function2(){ alert("方法"+testVar2); };
function function3(){ alert("方法"+testVar3); };
function function4(){ alert("方法"+testVar4); };
function function5(){ alert("方法"+testVar5); };
// here we want to call this function to attach all functions defined above to "obj1"
//[在這里我們調用方法通過obj1對象來調用方法]
// note: you can add one more parameter to the following line in place of "..." with total length limitation of 30 characters.
//[注意:在這個方法可以添譽灶加一個或多個參數,但字元長度不要超過30個] attachLocalVariables(obj1,...)})(jQuery);
var obj1 = {};
//定義函數名

$.fn.attachLocalVariables = function(){
// put your code here along with comments (in English) as much as possible
//[把你的代碼寫在盯虛洞這里,竟可能的寫上注釋]
//為obj1對象賦值

obj1 = {
testVar1:testVar1,
testVar2:testVar2,
testVar3:testVar3,
testVar4:testVar4,
testVar5:testVar5,
function1:function1,
function2:function2,
function3:function3,
function4:function4,
function5:function5
};
//test code
//測試代碼
alert(obj1.testVar1);
alert(obj1.testVar2);
alert(obj1.testVar3);
alert(obj1.testVar4);
alert(obj1.testVar5);
obj1.function1();
obj1.function2();
obj1.function3();
obj1.function4();
obj1.function5();
}
//attachLocalVariables(obj1);
})(jQuery)//看的明白注釋的更好,要回答的同學請嚴格按著要求執行*也許翻譯有點問題

//進行函數的調用
$(function(){
$.fn.attachLocalVariables();
});

希望對你有幫助!
-----------------------------------------------------------------------------------------------------------------------------

閱讀全文

與jquery編程題相關的資料

熱點內容
魔獸世界client文件夾 瀏覽:539
解壓音樂輕松入睡 瀏覽:270
c盤文件夾卡頓怎麼辦 瀏覽:448
增量調制編解碼實驗數據 瀏覽:761
電流采樣信號進單片機 瀏覽:189
編程教育課程收費 瀏覽:415
伺服器的氣怎麼寫 瀏覽:395
怎麼刪除授時伺服器地址 瀏覽:143
android基礎組件 瀏覽:666
建興app怎麼變成黑色了 瀏覽:51
文件壓縮包如何加密文件 瀏覽:183
2010提出的演算法 瀏覽:674
冰櫃壓縮機的壽命 瀏覽:105
辦公室采訪程序員 瀏覽:569
美橙雲伺服器購買 瀏覽:754
漢語詞典pdf下載 瀏覽:353
android公網ip 瀏覽:613
要塞1地圖放哪個文件夾 瀏覽:850
凡科建站怎麼弄伺服器 瀏覽:939
蘋果手機怎麼設置app播放 瀏覽:202