1. 程式人生 > 其它 >用truffle寫測試用例

用truffle寫測試用例

JQuery學習

什麼是JQuery

jQuery是JavaScript世界中使用最廣泛的一個庫。
jQuery解決了一些很重要的問題。實際上,jQuery能幫我們幹這些事情:

消除瀏覽器差異:你不需要自己寫冗長的程式碼來針對不同的瀏覽器來繫結事件,編寫AJAX等程式碼;
簡潔的操作DOM的方法:寫 $(’#test’) 肯定比document.getElementById(‘test’) 來得簡潔;
輕鬆實現動畫、修改CSS等各種操作。
jQuery的理念“Write Less, Do More“,讓你寫更少的程式碼,完成更多的工作!

官網:https://jquery.com/
文件:https://jquery.cuishifeng.cn/

jQuery只是一個 jquery-xxx.js 檔案,但你會看到有compressed(已壓縮)和uncompressed(未壓縮)兩種版本,使用時完全一樣,但如果你想深入研究jQuery原始碼,那就用uncompressed版本。

使用jQuery只需要在頁面的 head 引入jQuery檔案即可:

<script src="//code.jquery.com/jquery-1.11.3.min.js"></script>

公式: $(selector).action()

美元符號定義 jQuery
選擇符(selector)“查詢"和"查詢” HTML 元素

選擇器

選擇器是jQuery的核心。
jQuery的選擇器就是幫助我們快速定位到一個或多個DOM節點。

按ID查詢

如果某個DOM節點有 id 屬性,利用jQuery查詢如下:

// 查詢<div id="abc">:
var div = $('#abc');

按tag查詢

按tag查詢只需要寫上tag名稱就可以了:

var ps = $('p'); // 返回所有<p>節點
ps.length; // 數一數頁面有多少個<p>節點

按class查詢

按class查詢注意在class名稱前加一個 . :

var a = $('.red'); // 所有節點包含`class="red"`都將返回
// 例如:
// <div class="red">abc</div>
// <p class="green red">abc</p>

按屬性查詢

一個DOM節點除了 id 和 class 外還可以有很多屬性,很多時候按屬性查詢會非常方便,比如在一個表單中按屬性來查詢:

var email = $('[name=email]'); // 找出<??? name="email">
var passwordInput = $('[type=password]'); // 找出<??? type="password">
var a = $('[items="A B"]'); // 找出<??? items="A B">

當屬性的值包含空格等特殊字元時,需要用雙引號括起來。
按屬性查詢還可以使用字首查詢或者字尾查詢:

var icons = $('[name^=icon]'); // 找出所有name屬性值以icon開頭的DOM
// 例如: name="icon-1", name="icon-2"
var names = $('[name$=with]'); // 找出所有name屬性值以with結尾的DOM
// 例如: name="startswith", name="endswith"

操作DOM

修改Text和HTML

jQuery物件的 text() 和 html() 方法分別獲取節點的文字和原始HTML文字。

分別獲取文字和HTML:

$('#test-ul li[name=book]').text(); // 'Java & JavaScript'
$('#test-ul li[name=book]').html(); // 'Java &amp; JavaScript'


如何設定文字或HTML?jQuery的API設計非常巧妙:無引數呼叫 text() 是獲取文字,傳入引數就變成設定文字,HTML也是類似操作。

var j1 = $('#test-ul li.js');
var j2 = $('#test-ul li[name=book]');
j1.html('<span style="color: red">JavaScript</span>');
j2.text('JavaScript & ECMAScript');

一個jQuery物件可以包含0個或任意個DOM物件,它的方法實際上會作用在對應的每個DOM節點上。

$('#test-ul li').text('JS'); 

修改CSS

jQuery物件有“批量操作”的特點,這用於修改CSS實在是太方便了。要高亮顯示動態語言,呼叫jQuery物件的 css(‘name’, ‘value’) 方法,我們用一行語句實現:

$('#test-css li.dy>span').css('background-color', '#ffd351').css('color','red');

注意,jQuery物件的所有方法都返回一個jQuery物件(可能是新的也可能是自身),這樣我們可以進行鏈式呼叫,非常方便。

jQuery物件的 css() 方法可以這麼用:

var div = $('#test-div');
div.css('color'); // '#000033', 獲取CSS屬性
div.css('color', '#336699'); // 設定CSS屬性
div.css('color', ''); // 清除CSS屬性

css() 方法將作用於DOM節點的 style 屬性,具有最高優先順序。如果要修改 class 屬性,可以用jQuery提供的下列方法:

var div = $('#test-div');
div.hasClass('highlight'); // false, class是否包含highlight
div.addClass('highlight'); // 新增highlight這個class
div.removeClass('highlight'); // 刪除highlight這個class

顯示和隱藏DOM

要隱藏一個DOM,我們可以設定CSS的 display 屬性為 none ,利用 css() 方法就可以實現。

不過,要顯示這個DOM就需要恢復原有的 display 屬性,這就得先記下來原有的 display 屬性到底是 block 還是 inline 還是別的值。
考慮到顯示和隱藏DOM元素使用非常普遍,jQuery直接提供 show() 和 hide() 方法,我們不用關心它是如何修改 display 屬性的,總之它能正常工作:

var a = $('a[target=_blank]');
a.hide(); // 隱藏
a.show(); // 顯示

注意,隱藏DOM節點並未改變DOM樹的結構,它隻影響DOM節點的顯示。這和刪除DOM節點是不同的。

獲取DOM資訊

利用jQuery物件的若干方法,我們直接可以獲取DOM的高寬等資訊,而無需針對不同瀏覽器編寫特定程式碼:

// 瀏覽器可視視窗大小:
$(window).width(); // 800
$(window).height(); // 600

// HTML文件大小:
$(document).width(); // 800
$(document).height(); // 3500

// 某個div的大小:
var div = $('#test-div');
div.width(); // 600
div.height(); // 300
div.width(400); // 設定CSS屬性 width: 400px,是否生效要看CSS是否有效
div.height('200px'); // 設定CSS屬性 height: 200px,是否生效要看CSS是否有效

attr() 和 removeAttr() 方法用於操作DOM節點的屬性:

// <div id="test-div" name="Test" start="1">...</div>
var div = $('#test-div');
div.attr('data'); // undefined, 屬性不存在
div.attr('name'); // 'Test'
div.attr('name', 'Hello'); // div的name屬性變為'Hello'
div.removeAttr('name'); // 刪除name屬性
div.attr('name'); // undefined

操作表單

對於表單元素,jQuery物件統一提供 val() 方法獲取和設定對應的 value 屬性:

/*
<input id="test-input" name="email" value="">

<select id="test-select" name="city">
    <option value="BJ" selected>Beijing</option>
    <option value="SH">Shanghai</option>
    <option value="SZ">Shenzhen</option>
</select>
<textarea id="test-textarea">Hello</textarea>

*/
<script>
    var
        input = $('#test-input'),
        select = $('#test-select'),
        textarea = $('#test-textarea');

    input.val(); // 'test'
    input.val('[email protected]'); // 文字框的內容已變為[email protected]

    select.val(); // 'BJ'
    select.val('SH'); // 選擇框已變為Shanghai

    textarea.val(); // 'Hello'
    textarea.val('Hi'); // 文字區域已更新為'Hi'
</script>

可見,一個 val() 就統一了各種輸入框的取值和賦值的問題。

新增DOM

要新增新的DOM節點,除了通過jQuery的 html() 這種暴力方法外,還可以用 append() 方法。
如何向列表新增一個語言?首先要拿到 ul 節點:

var ul = $('#test-div>ul');

然後,呼叫 append() 傳入HTML片段

ul.append('<li><span>1LDK</span></li>');
ul.prepend('<li><span>1LDK</span></li>');

append() 把DOM新增到最後, prepend() 則把DOM新增到最前。

如果要把新節點插入到指定位置,例如,JavaScript和Python之間,那麼,可以先定位到JavaScript,然後用 after() 方法:

var js = $('#test-div>ul>li:first-child');
js.before('<li><span>1LDK</span></li>');
js.after('<li><span>1LDK</span></li>');

也就是說,同級節點可以用 after() 或者 before() 方法。

刪除節點

要刪除DOM節點,拿到jQuery物件後直接呼叫 remove() 方法就可以了。如果jQuery物件包含若干DOM節點,實際上可以一次刪除多個DOM節點:

var li = $('#test-div>ul>li');
li.remove(); // 所有<li>全被刪除

事件

jQuery能夠繫結的事件主要包括:

滑鼠事件

click: 滑鼠單擊時觸發;
dblclick:滑鼠雙擊時觸發;
mouseenter:滑鼠進入時觸發;
mouseleave:滑鼠移出時觸發;
mousemove:滑鼠在DOM內部移動時觸發;
hover:滑鼠進入和退出時觸發兩個函式,相當於mouseenter加上mouseleave。

鍵盤事件

鍵盤事件僅作用在當前焦點的DOM上。
keydown:鍵盤按下時觸發;
keyup:鍵盤松開時觸發;
keypress:按一次鍵後觸發。

其他事件

focus:當DOM獲得焦點時觸發;
blur:當DOM失去焦點時觸發;
change:當元素的值發生改變時,會發生 change 事件。
submit:當提交表單時,會發生 submit 事件。
ready:當頁面被載入並且DOM樹完成初始化後觸發。

初始化事件

我們自己的初始化程式碼必須放到 document 物件的 ready 事件中,保證DOM已完成初始化:

<html>
<head>
    <script>
        $(document).on('ready', function () {
            $('#testForm').on('submit', function () {
                alert('submit!');
            });
        });
    </script>
</head>
<body>
    <form id="testForm">
        ...
    </form>
</body>

相關程式碼會在DOM樹初始化後再執行。

由於 ready 事件使用非常普遍,所以可以這樣簡化:

$(document).ready(function () {
    // on('submit', function)也可以簡化:
    $('#testForm').submit(function () {
        alert('submit!');
    });
});

甚至還可以再簡化為:

$(function () {
	// init...
});

事件引數

有些事件,如 mousemove 和 keypress ,我們需要獲取滑鼠位置和按鍵的值,否則監聽這些事件就沒什麼意義了。所有事件都會傳入 Event 物件作為引數,可以從 Event 物件上獲取到更多的資訊:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        #testMouseMoveDiv {
            width: 300px;
            height: 300px;
            border: 1px solid chocolate;
        }
    </style>
</head>
<body>
    mousemove: <span id="testMouseMoveSpan"></span>
    <div id="testMouseMoveDiv">
        在此區域移動滑鼠試試
    </div>
    <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    <script>
        $(function () {
            $('#testMouseMoveDiv').mousemove(function (e) {
                $('#testMouseMoveSpan').text('pageX = ' + e.pageX + ', pageY = ' +
                    e.pageY);
            });
        });
    </script>
</body>

</html>