1.將原素從DOM中移除

Jquery 提供兩種方式將原素從DOM中移除,分別為:Remove(移除),Detach(解除)

note:差別在於,remove方法將element永遠移除,detach從DOM中拿走但是先幫你保留,可以在附加回去

Remove: $("img#thumbnail").remove();

Detach:  $("img#thumbnail").detach();

擷取

 

下圖:

$("div#top").remove() : 注意對元素執行remove or detach時,該元素的所有子元素也會被移除or解除。

$("div p").detach() : 選擇器(selector)所比對出來,所有符合之元素都會被解除。

$("li.fish").detach() : 元素以class分群 or ID設定時,可以更明確選取你要的元素。

擷取  

 

2.DOM Traversal(穿梭)

A. 爬向父節點: $(".fish").parent() , 選取所有fish類別之元素,取得這些元素之上層元素。

B. 爬向子元素: $(".menu_list").children() , 選取所有menu_list類別之元素,取得這些元素之下層元素。

C.爬向同一層且位於左邊(前一個)之元素: $(".fish").prev() 

D.爬向同一層且位於右邊(後一個)之元素: $(".fish").next() 

擷取  

note: 可以以鏈(chain)之方式爬行於DOM,簡單的說就是對上述做不同搭配。

ex. $(".fish").parent().next().remove();

 

3.使用變數(陣列)儲存抓取到的元素

下圖使用 : $(".fish").parent().parent().deatch(); 可以抓取到一串 li 。 

擷取  

我們用來儲存回傳之元素的變數之前會加一個$,這樣的話其他程式設計師也都會知道,我們正在儲存回傳之元素。

$f =  $(".fish").parent().parent().deatch(); 

可以把 $f 想像成是一個陣列

擷取  

擷取  

上面抓的3個li,可以分別用$f[0],$f[1],$f[2] 取出。

 

4.使用replaceWith 替換元素

此方法利用新的元素替代被選擇之元素。

如下圖:想將漢堡替換成甜甜圈。

擷取  

$(".hamburger").replaceWith("<li class = 'portobello'><em>Portobello Mushroom</em></li>")

.hamburger : 選擇所有漢堡元素

replaceWith : 此方法動態將 () 中內容替代到你選擇之內容,重點是你可以在 () 中放入html。

 

note: replaceWith並非是何所有狀況,下圖說明。

1.若是1對1的交換取代元素,repalceWith非常適合,因為我們還可以記住是跟哪個DOM交換

擷取  

2.若是一對多的交換,用豆腐換其他肉類,在換回來的時候只能把所有肉類換到豆腐,已經忘記當初對應到是哪種肉類了。

擷取  

 

5.將HTML內容插入到DOM

A. before : 在被選擇的元素之前插入內容。

  $('.meat').before("<li>Tofu</li>");

B. after : 在被選擇之元素之後插入內容。

  $('.meat').after("<li>Tofu</li>");

擷取  

 

6.使用過濾方法縮小你的選擇

first : 此方法過濾掉一組被選擇之元素,只留下第一個元素。

eq : 此方法過濾掉一組被選擇之元素,只留下放在()內對應索引值之元素。

last : 此方法過濾掉一組被選擇之元素,只留下最後一個元素。

範例如下圖:

擷取  

第二部分:

slice : 只留下()中第一個索引值(包含)到第二個索引值(不包含)之元素。(注意第一個索引值是0)

fliter : 只留下你放在()中之元素。

not : 只留下不符合你放在()中之元素。

擷取  

 

7.each方法遶行陣列

我們將所有肉的meat元素放入$m中,記住$m是一個陣列。

接著我們要將肉元素陣列倒回去豆腐陣列中。

$(".tofu").each(function(i){

  $(this).after($m[i])

});

$(".tofu") : 選擇要被替換之元素。

.each : 一個一個處理陣列元素。

function(i) : 從0開始隨著每個元素被處理之同時遞增。// i 就是 index

$(this) : 告訴你目前處理到哪個元素。

after : 可以替換為任何你想做的方法。

 

 

Example:

1.HTML

<!DOCTYPE html>

<html>
<head>
<title>Our Menu</title>
<link type="text/css" href="styles/my_style.css" rel="stylesheet" />
</head>
<body>
<div class="menu_wrapper">
<header class="topper">
<h2>Our Menu</h2>
<nav>
<button id="vegOn">Go Vegetarian</button>
<button id="restoreMe">Restore Menu</button>
</nav>
</header>
<div class="left_col">
<h4>Dinner Entrees</h4>
<ul class="menu_entrees">
<li>Poached Salmon
<ul class="menu_list">
<li class="fish">salmon</li>
<li>white wine</li>
<li>salt</li>
<li>black pepper </li>
</ul>
</li>
<li>Roasted Trout
<ul class="menu_list">
<li class="fish">grilled trout</li>
<li>mint</li>
<li>capers</li>
<li>olives</li>
<li>tomato</li>
<li>lemon</li>
<li>olive oil</li>
<li>potatoes </li>
</ul>
</li>
<li>Thai-style Halibut
<ul class="menu_list">
<li>coconut milk</li>
<li class="fish">pan-fried halibut</li>
<li>lemongrass broth</li>
<li>early autumn vegetables</li>
<li>Thai spices </li>
</ul>
</li>
<li>Braised Delight
<ul class="menu_list">
<li class="meat">lamb shoulder</li>
<li class="veg_leaf">cipolinni onions</li>
<li>carrots</li>
<li>baby turnip</li>
<li>roasted red grapes</li>
<li>braising jus</li>
</ul>
</li>
<li>House Grilled Panini
<ul class="menu_list">
<li class="meat">proscuttio</li>
<li>provolone</li>
<li>avocado</li>
<li>cherry tomatoes</li>
<li>sourdough roll</li>
<li>shoestring fries </li>
</ul>
</li>
<li>House Slider
<ul class="menu_list">
<li>marinated eggplant</li>
<li>zucchini</li>
<li class="hamburger">hamburger</li>
<li>balsamic vinaigrette</li>
<li>onion</li>
<li>carrots</li>
<li>Multi-grain roll</li>
<li>goat cheese</li>
</ul>
</li>
<li>Southwest Slider
<ul class="menu_list">
<li>whole chiles</li>
<li class="hamburger">hamburger</li>
<li>pepperjack cheese</li>
<li>onion</li>
<li>carrots</li>
<li>sliced avocado</li>
<li>Multi-grain roll</li>
</ul>
</li>
<li>Frittata
<ul class="menu_list">
<li class="meat">eggs</li>
<li>asiago, provolone, and romano cheeses</li>
<li>potatoes </li>
</ul>
</li>
</ul>
</div>

<div class="right_col">
<h4>Soups and Sides</h4>
<ul class="menu_entrees">
<li>Coconut Soup
<ul class="menu_list">
<li>coconut milk</li>
<li class="meat">chicken</li>
<li>vegetable broth</li>
</ul>
</li>
<li>Soup Du Jour
<ul class="menu_list">
<li class="meat">grilled steak</li>
<li>mushrooms</li>
<li>seasonal vegetables</li>
<li>vegetable broth </li>
</ul>
</li>
<li>Hot and Sour Soup
<ul class="menu_list">
<li class="meat">roasted pork</li>
<li>carrots</li>
<li>Chinese mushrooms</li>
<li>chili</li>
<li>vegetable Broth </li>
</ul>
</li>
<li>Stuffed Baked Potato
<ul class="menu_list">
<li>potato</li>
<li class="meat">charbroiled or blackened chicken</li>
<li>seasonal veggies</li>
<li>cheddar &amp; jack cheese</li>
<li>creamy alfredo sauce</li>
</ul>
</li>
<li>Avocado Rolls
<ul class="menu_list">
<li> Avocado</li>
<li>Whole chiles</li>
<li>Sweet red peppers</li>
<li>Ginger dipping sauce</li>
</ul>
</li>
<li>Roasted Artichoke Hearts
<ul class="menu_list">
<li>Artichoke hearts</li>
<li>Balsamic vinegar</li>
<li>Steamed garlic</li>
</ul>
</li>
<li>Garlic Broccoli
<ul class="menu_list">
<li>Stir Fried Broccoli</li>
<li>Carrots</li>
<li>Onions</li>
<li>Garlic Sauce </li>
</ul>
</li>
<li>Stir-Fried Garlic Vegetables
<ul class="menu_list">
<li>Stir Fried Mixed Vegetables</li>
<li>Mushrooms</li>
<li>Carrots</li>
<li>Onions</li>
<li>Garlic </li>
</ul>
</li>
<li>Garlic Green Beans with Mushrooms
<ul class="menu_list">
<li>Stir Fried Green Beans</li>
<li>Carrots</li>
<li>Onions</li>
<li>Mushrooms </li>
</ul>
</li>
</ul>
</div>
<footer class="bottom">
<h5>Address</h5>
</footer>
</div>
<script src="scripts/jquery-1.6.2.min.js"></script>
<script src="scripts/my_scripts.js"></script>
</body>
</html>

 

2.Jquery

$(document).ready(function(){

var v = false;
var $f, $m;
//按下按鈕切換成素食
$("button#vegOn").click(function(){
//若素食flag為false
if (v == false){
//fish類別往上爬兩層,會是li將其解除,並存放於$f這個陣列中
$f = $(".fish").parent().parent().detach();

//用"<li class='portobello'><em>Portobello Mushroom</em></li>"去取代漢堡類別
//會用replaceWith是因為漢堡和Portobello都是單一元素所以可以一對一換
$(".hamburger").replaceWith("<li class='portobello'><em>Portobello Mushroom</em></li>");
//portobello類別往上爬兩層,再利用.addClass加上名為veg_leaf之CSS樣式(葉子圖片)
$(".portobello").parent().parent().addClass("veg_leaf");
//以下三行目的為將豆腐類別取代肉類別
//先再肉類別後面插入豆腐類別,下一行保肉類別解除後,豆腐類別自然會取而代之顯示
$(".meat").after("<li class='tofu'><em>Tofu</em></li>");
//將肉類別給解除,並且放入$m陣列中保存
$m = $(".meat").detach();
//豆腐類別往上爬兩層,再利用.addClass加上名為veg_leaf之CSS樣式(葉子圖片)
$(".tofu").parent().parent().addClass("veg_leaf");
//將素食flag改true
v = true;
}// end if
});//end veg button

//按下按鈕切換回肉類
$("button#restoreMe").click(function(){
//如果判斷目前為素食菜單
if (v == true){
//portobello類別往上爬兩層,並且移除葉子圖片
$(".portobello").parent().parent().removeClass("veg_leaf");
//用漢堡類別取代portobello
$(".portobello").replaceWith("<li class='hamburger'>Hamburger</li>");
//到menu_entrees 下一層的li,再移到第一個元素的後面插入上面$f(fish)陣列內容
$(".menu_entrees li").first().before($f);
//移除葉子
$(".tofu").parent().parent().removeClass("veg_leaf");
//用each方法繞行豆腐類別,$(this)代表目前執行到豆腐哪一個元素,在其後方插入肉類類別
$(".tofu").each( function(i){
$(this).after($m[i]);
}); //end each
//將豆腐類別給移除
$(".tofu").remove();
//將素食給tag給改掉
v = false;
}//end if
});//end restoreMe button
});//end doc ready

 

3.CSS

.menu_wrapper{
width: 96%;
border: 1px solid gray;
}

.topper{
padding: 2%;
width: 96%;
height: 100px;
overflow: hidden;
border-bottom: 1px solid gray;
}


.left_col{
float: left;
padding: 4%;
width: 41%;
height: 1000px;
border-right: 1px solid gray;

}

.right_col{
float: right;
padding: 4%;
width: 41%;
height: 1000px;
border-left: 1px solid gray;
}

.bottom{
clear:both;
padding: 2%;
width: 96%;
height: 60px;
border-top: 1px solid gray;
}


.nav{
text-align: right;
float: right;
list-style: none;
padding-left: 15px;
}


.menu_entrees li{
list-style-type: none;
padding-left: 10px;
}


.menu_list{
padding-bottom: 15px;
}

.menu_list li{
display: inline;
list-style-type: none;
padding-left: 15px;
}

.meat{
background-color: "#000000";
}

.hamburger{
color: "#000000";
}

.fish{
color: "#000000";
}

.tofu{
color: "#00FF00";
}

.portobello{
color: "#00FF00";
}

.veg_leaf{
list-style-image:url('../images/leaf.png');
}

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 melomelo1988 的頭像
    melomelo1988

    melo 唐

    melomelo1988 發表在 痞客邦 留言(0) 人氣()