1. 程式人生 > >Jquery5 基礎 DOM 和 CSS 操作

Jquery5 基礎 DOM 和 CSS 操作

而在 script 清理 位置 this clas radi 獲取 spa

學習要點:

  • 1.DOM 簡介
  • 2.設置元素及內容
  • 3.元素屬性操作
  • 4.元素樣式操作
  • 5.CSS 方法

DOM 是一種文檔對象模型。方便開發者對HTML 結構元素內容進行展示和修改。在 JavaScript 中,DOM 不但內容龐大繁雜,而且開發的過程中需要考慮更多的兼容性、擴展性。在 jQuery 中,已經將最常用的 DOM 操作方法進行了有效封裝,並且不需要考慮瀏覽器的兼容性。

一.DOM 簡介

由於課程是基於 JavaScript 基礎上完成的,這裏不去詳細的了解 DOM 到底是什麽。只需要知道幾個基本概念:

  • 1.D 表示的是頁面文檔 Document、O 表示對象,即一組含有獨立特性的數據集合、M表示模型,即頁面上的元素節點和文本節點。
  • 2.DOM 有三種形式,標準 DOM、HTML DOM、CSS DOM,大部分都進行了一系列的封裝,在 jQuery 中並不需要深刻理解它。
  • 3.樹形結構用來表示 DOM,就非常的貼切,大部分操作都是元素節點操作,還有少部分是文本節點操作。

二.設置元素及內容

通過前面所學習的各種選擇器、過濾器來得到想要操作的元素。這個時候就可以對這些元素進行 DOM 的操作。那麽,最常用的操作就是對元素內容的獲取和修改。

技術分享圖片

在常規的 DOM 元素中,我們可以使用 html()和 text()方法獲取內部的數據。html()方法可以獲取或設置 html 內容,text()可以獲取或設置文本內容。

$(‘#box‘).html(); //
獲取 html 內容 $(‘#box‘).text(); //獲取文本內容,會自動清理 html 標簽 $(‘#box‘).html(‘<em>www.li.cc</em>‘); //設置 html 內容 $(‘#box‘).text(‘<em>www.li.cc</em>‘); //設置文本內容,會自動轉義 html 標簽

註意:當使用 html()或 text()設置元素裏的內容時會清空原來的數據。期望能夠追加數據的話,需要先獲取原本的數據。

$(‘#box‘).html($(‘#box‘).html() + ‘<em>www.li.cc</em>‘); //
追加數據

如果元素是表單的話,jQuery 提供了 val()方法進行獲取或設置內部的文本數據。

$(‘input‘).val(); //獲取表單內容
$(‘input‘).val(‘www.li.cc‘); //設置表單內容

如果想設置多個選項的選定狀態,比如下拉列表、單選復選框等等,可以通過數組傳遞操作。

$("input").val(["check1","check2", "radio1" ]); //value 值是這些的將被選定

三.元素屬性操作

除了對元素內容進行設置和獲取,通過 jQuery 也可以對元素本身的屬性進行操作,包括獲取屬性的屬性值、設置屬性的屬性值,並且可以刪除掉屬性。

技術分享圖片

$(‘div‘).attr(‘title‘); //獲取屬性的屬性值

$(‘div‘).attr(‘title‘, ‘我是域名‘); //設置屬性及屬性值
$(‘div‘).attr(‘title‘, function () { //通過匿名函數返回屬性值   return ‘我是域名‘; });
$(
‘div‘).attr(‘title‘, function (index, value) { //可以接受兩個參數   return value + (index+1) + ‘,我是域名‘; });

註意:attr()方法裏的 function() {},可以不傳參數。可以只傳一個參數 index,表示當前元素的索引(從 0 開始)。也可以傳遞兩個參數 index、value,第二個參數表示屬性原本的值。

註意:jQuery 中很多方法都可以使用 function() {}來返回出字符串,比如 html()、text()、val()和 is()、filter()方法。而如果又涉及到多個元素集合的話,還可以傳遞
index 參數來獲取索引值,並且可以使用第二個參數 value(並不是所有方法都適合)。

$(‘div‘).html(function (index) { //通過匿名函數賦值,並傳遞 index
    return ‘我是‘ + (index+1) + ‘號 div‘;
});

$(‘div‘).html(function (index, value) { //還可以實現追加內容
    return ‘我是‘ + (index+1) + ‘號 div:‘+value ;
});

註意:可以使用 attr()來創建 id 屬性,但強烈不建議這麽做。這樣會導致整個頁面結構的混亂。當然也可以創建 class 屬性,但後面會有一個語義更好的方法來代替 attr()方法,所以也不建議使用。

刪除指定的屬性,這個方法就不可以使用匿名函數,傳遞 index 和 value 均無效。

$(‘div‘).removeAttr(‘title‘); //刪除指定的屬性

四.元素樣式操作

元素樣式操作包括了直接設置 CSS 樣式、增加 CSS 類別、類別切換、刪除類別這幾種操作方法。而在整個 jQuery 使用頻率上來看,CSS 樣式的操作也是極高的,所以需要重點掌握。

技術分享圖片

技術分享圖片

$(‘div‘).css(‘color‘); //獲取元素行內 CSS 樣式的顏色
$(‘div‘).css(‘color‘, ‘red‘); //設置元素行內 CSS 樣式顏色為紅色

在 CSS 獲取上,可以獲取多個 CSS 樣式,而獲取到的是一個對象數組,如果用傳統方式進行解析需要使用 for in 遍歷。

var box = $(‘div‘).css([‘color‘, ‘height‘, ‘width‘]); //得到多個 CSS 樣式的數組對象
for (var i in box) { //逐個遍歷出來
  alert(i + ‘:‘ + box[i]);
}

jQuery 提供了一個遍歷工具專門來處理這種對象數組,$.each()方法,這個方法可以輕松的遍歷對象數組。

$.each(box, function (attr, value) { //遍歷 JavaScript 原生態的對象數組
  alert(attr + ‘:‘ + value);
});

使用$.each()可以遍歷原生的 JavaScript 對象數組,如果是 jQuery 對象的數組怎麽使用.each()方法呢?

$(‘div‘).each(function (index, element) { //index 為索引,element 為元素 DOM
  alert(index + ‘:‘ + element);
});

在需要設置多個樣式的時候,可以傳遞多個 CSS 樣式的鍵值對即可。

$(‘div‘).css({
  ‘background-color‘ : ‘#ccc‘,
  ‘color‘ : ‘red‘,‘font-size‘ : ‘20px‘
});

如果想設置某個元素的 CSS 樣式的值,但這個值需要計算,可以傳遞一個匿名函數。

$(‘div‘).css(‘width‘, function (index, value) {
  return (parseInt(value) - 500) + ‘px‘;
});

除了行內 CSS 設置,也可以直接給元素添加 CSS 類,可以添加單個或多個,也可以刪除它。

$(‘div‘).addClass(‘red‘); //添加一個 CSS 類
$(‘div‘).addClass(‘red bg‘); //添加多個 CSS 類
$(‘div‘).removeClass(‘bg‘); //刪除一個 CSS 類
$(‘div‘).removeClass(‘red bg‘); //刪除多個 CSS 類

還可以結合事件來實現 CSS 類的樣式切換功能。

$(‘div‘).click(function () { //當點擊後觸發
  $(this).toggleClass(‘red size‘); //單個樣式多個樣式均可
});

.toggleClass()方法的第二個參數可以傳入一個布爾值,true 表示執行切換到 class 類,false

表示執行回默認 class 類(默認的是空 class),運用這個特性,我們可以設置切換的頻率。

var count = 0;
$(‘div‘).click(function () { //每點擊兩次切換一次 red
    $(this).toggleClass(‘red‘, count++ % 3 == 0);
});

默認的 CSS 類切換只能是無樣式和指定樣式之間的切換,如果想實現樣式 1 和樣式 2之間的切換還必須自己寫一些邏輯。

$(‘div‘).click(function () {
  $(this).toggleClass(‘red size‘); //一開始切換到樣式 2
  if ($(this).hasClass(‘red‘)) { //判斷樣式 2 存在後
    $(this).removeClass(‘blue‘); //刪除樣式 1
  } else {
    $(this).toggleClass(‘blue‘); //添加樣式 1,這裏也可以 addClass
  }
});

上面的方法較為繁瑣,.toggleClass()方法提供了傳遞匿名函數的方式,來設置所需要切換的規則。

$(‘div‘).click(function () {
  $(this).toggleClass(function () { //傳遞匿名函數,返回要切換的樣式
    return $(this).hasClass(‘red‘) ? ‘blue‘ : ‘red size‘;
});

});

註意:上面雖然一句話實現了這個功能,但還是有一些小缺陷,因為原來的 class 類沒有被刪除,只不過被替代了而已。所以,需要改寫一下。

$(‘div‘).click(function () {
  $(this).toggleClass(function () {
    if ($(this).hasClass(‘red‘)) {
      $(this).removeClass(‘red‘);
      return ‘green‘;
    } else {
      $(this).removeClass(‘green‘);
      return ‘red‘;
    }
  });
});

也可以在傳遞匿名函數的模式下,增加第二個頻率參數。

var count = 0;
$(‘div‘).click(function () {
  $(this).toggleClass(function () {
    return $(this).hasClass(‘red‘) ? ‘blue‘ : ‘red size‘;
  },count++ % 3 == 0); //增加了頻率
});

對於.toggleClass()傳入匿名函數的方法,還可以傳遞 index 索引、class 類兩個參數以及頻率布爾值,可以得到當前的索引、class 類名和頻率布爾值。

var count = 0;
$(‘div‘).click(function () {
  $(this).toggleClass(function (index, className, switchBool) {
    alert(index + ‘:‘ + className + ‘:‘ + switchBool); //得到當前值
    return $(this).hasClass(‘red‘) ? ‘blue‘ : ‘red size‘;
  },count++ % 3 == 0);
});

五.CSS 方法

jQuery 不但提供了 CSS 的核心操作方法,比如.css()、.addClass()等。還封裝了一些特殊功能的 CSS 操作方法,分別來了解一下。

$(‘div‘).width(); //獲取元素的長度,返回的類型為 number
$(‘div‘).width(500); //設置元素長度,直接傳數值,默認加 px
$(‘div‘).width(‘500pt‘); //同上,設置了 pt 單位
$(‘div‘).width(function (index, value) { //index 是索引,value 是原本值
return value - 500; //無須調整類型,直接計算
});
$(‘div‘).height(); //獲取元素的高度,返回的類型為 number
$(‘div‘).height(500); //設置元素高度,直接傳數值,默認加 px
$(‘div‘).height(‘500pt‘); //同上,設置了 pt 單位
$(‘div‘).height(function (index, value) { //index 是索引,value 是原本值
  return value - 1; //無須調整類型,直接計算
});
alert($(‘div‘).width()); //不包含
alert($(‘div‘).innerWidth()); //包含內邊距 padding
alert($(‘div‘).outerWidth()); //包含內邊距 padding+邊框 border
alert($(‘div‘).outerWidth(true)); //包含內邊距 padding+邊框 border+外邊距 margin
$(‘strong‘).offset().left; //相對於視口的偏移
$(‘strong‘).position().left; //相對於父元素的偏移
$(window).scrollTop(); //獲取當前滾動條的位置
$(window).scrollTop(300); //設置當前滾動條的位置

Jquery5 基礎 DOM 和 CSS 操作