【web必知必會】—— 使用DOM完成屬性填充

  本文介紹了使用DOM的簡單方法實現動態加載圖片的功能。

  前文介紹了:

  1 DOM四個常用的方法

  首先看一下效果,初始時是一個相冊,可以點擊導航,切換圖片,并切換下方顯示內容:

  點擊house,可以動態的切換另一個圖片

  所使用的代碼,如下:

<!doctype html>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>我的相冊</title><style type="text/css">body {font-family: "Helvetica","Arial",sans-serif;color: #333;background-color: #ccc;margin: 1em 10%;}h1 {color:#333;background-color: transparent;}a {color:#c60;background-color: transparent;font-weight: bold;text-decoration:none;}li {float: left;padding: 1em;list-style: none;}img {clear:both;display: block;}</style></head><body><h1>我的相冊</h1><ul><li><a href="images/pig.png" title="I'm pig!" οnclick="showPic(this);return false;">Pig</a></li><li><a href="images/rabit.png" title="I'm rabit!" οnclick="showPic(this);return false;">Rabit</a></li><li><a href="images/house.png" title="I'm house!" οnclick="showPic(this);return false;">house</a></li><li><a href="images/monkey.png" title="I'm monkey!" οnclick="showPic(this);return false;">monkey</a></li></ul><img id="placeHolder" alt="image" src="images/pig.png"/><p id="description">Choose an image.</p><script type="text/javascript">function showPic(whichPic){var source = whichPic.getAttribute("href");var placeHolder = document.getElementById("placeHolder");placeHolder.setAttribute("src",source);var text = whichPic.getAttribute("title");var description = document.getElementById("description");description.firstChild.nodeValue = text;}</script></body>
</html>

  代碼解析

  在這篇示例代碼中,主要需要了解的內容是:

  1 如何獲取元素對象的屬性

  2 如何動態設置元素對象的屬性值

  3 如何攔截click事件

  4 如何動態設置元素文本

  5 float浮動

  1&2 獲取設置元素對象的屬性

  前篇已經介紹過了,獲取設置元素的屬性,可以使用getAttribute()和setAttribute()兩個方法:

  在showPic()函數中,通過傳過來的對象,可以直接調用getAttribute獲取屬性href的鏈接內容,然后通過getElementById方法獲取圖片對象,并設置其src的屬性值。

var source = whichPic.getAttribute("href");
var placeHolder = document.getElementById("placeHolder");
placeHolder.setAttribute("src",source);

  3 onclick事件

  上面已經創建好了showPic()方法,只要傳入對象即可。因此在a標簽中,使用onclick事件,即可。

  但是onClick事件,是要接收一個bool值,如果是true,則會默認的跳到另一個網頁鏈接;相反,如果是false,則不會產生任何結果。

  因此在onClick事件中需要如下書寫:

<a href="images/pig.png" title="I'm pig!" οnclick="showPic(this);return false;">Pig</a>

  4 動態設置文本

  如果想要使用元素對象的文本,使用nodeValue就可以了。但是如果直接使用,會得到null值。

  因為,元素對象本身是沒有文本的,但是它有childNodes對象、firstChild和lastChild對象。

  展開他的childNodes屬性可以發現,該屬性中包含一個對象:

  該對象中有nodeValue屬性,對應的才是標簽對應的內容。

  由于該標簽中只有一個對象,因此使用?firstChild?和?lastChild?或者?childNodes[0]?都可以獲取到該對象。

  其中的原理,類似前面文章講述的元素節點,屬性節點和文本節點的關系,文本節點是該元素標簽節點的一個子對象,因此無法用nodeValue直接獲取標簽的文本,而是需要獲取它的孩子對象,才能得到nodeValue。

  5 float浮動

  如果不設置img的CSS樣式,會發現本來我們想要使ul中的li標簽水平顯示,結果在寬度足夠的情況下,img也跟著水平顯示了。

  這是為什么呢?

  查閱資料發現,原來傳統的文檔對象是按照文檔布局來顯示的:由上到下,由左到右,遇到塊級元素則換行,遇到內聯元素則補齊。

  如果使用float浮動,會打破該布局,如果給對象設置上了float屬性,則會導致文檔布局時,出現一定的空隙,那么這個空隙就會讓下一個元素來填充了。

  因此上面的圖片布局中,img元素會隨著ul中li的float一起浮動顯示。

  而clear:both則是為了預防float引起的布局錯亂,可以使用clear清除布局設置。這樣img就不會與前面的li產生同樣的float效果了。

  但是雖然清除了浮動,但由于img元素屬于內聯元素,因此只要把它轉換成塊級元素,就可以產生換行的效果了。

            img {clear:both;display: block;}

?

  參考

  【1】float詳解:http://www.cnblogs.com/polk6/archive/2013/07/25/3142187.html

  【2】《JavaScript DOM 編程藝術》

  【3】巧用clear:both:http://www.cnblogs.com/jenney-qiu/archive/2012/03/28/2421819.html

  【4】display:http://www.w3school.com.cn/cssref/pr_class_display.asp

  【5】塊級元素與內聯元素:http://www.cnblogs.com/NetSos/archive/2010/08/31/1814223.html

轉載于:https://www.cnblogs.com/xing901022/p/4333757.html

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

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

相關文章

地址總線 數據總線

地址總線&#xff1a; CPU地址總線的寬度決定了它能尋址多少個內存單元地址,一個CPU有N根地址總線那么它的尋址能力為2^N次方。8086CPU地址總線寬度為20可尋址2^20次方個內存單元地址大小為1M。80386地址總線寬度為32可尋址內存為4GB 數據總線&#xff1a; CPU與存儲器之間的數…

Spring事務配置方式(一) 攔截器方式配置

一、使用<tx:advice>和<aop:config>配置事務 <!-- 配置事務管理器 --><bean id"transactionManager" class"org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name"dataSource" ref&qu…

8086寄存器組

寄存器(14個)|AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES| >通用寄存器 數據寄存器(存放一般數據)AX (AH,AL) | BX (BH,BL) | CX (CH,CL) | DX (DH,DL) 指針寄存器 堆棧指針 基址指針SP BP (SS:SP) 變址寄存器 源地址 目的地址SI …

學習動態性能表(10)--v$session_longops

學習動態性能表 第十篇--V$SESSION_LONGOPS 2007.6.7 本視圖顯示運行超過6秒的操作的狀態。包括備份&#xff0c;恢復&#xff0c;統計信息收集&#xff0c;查詢等等。 要監控查詢執行進展狀況&#xff0c;你必須使用cost-based優化方式&#xff0c;并且&#xff1a; 設置TIME…

存儲器

存儲器以字節為單位存儲信息,一個存儲單元存儲一個字節。一個字需要用兩個連續的存儲單元。 每一個存儲單元有唯一的地址&#xff0c;稱為存儲單元地址。

JDBC常用API小結

建立數據庫鏈接的三種方式&#xff1a; package com.victor_01;import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties;import org.junit.Test;public class Test1 {private String…

學習動態性能表(12)--v$db_object_cache

學習動態性能表 第12篇--V$DB_OBJECT_CACHE 2007.6.4 本視圖提供對象在library cache(shared pool)中對象統計&#xff0c;提供比v$librarycache更多的細節&#xff0c;并且常用于找出shared pool中的活動對象。 v$db_object_cache中的常用列&#xff1a; OWNER&#xff1a;對…

Java Platform Standard Edition 8 Documentation

下面這個圖挺有用的&#xff0c;收藏一下。Oracle has two products that implement Java Platform Standard Edition (Java SE) 8: Java SE Development Kit (JDK) 8 and Java SE Runtime Environment (JRE) 8.JDK 8 is a superset of JRE 8, and contains everything that is…

清除端口占用的程序

程序啟動的過程中&#xff0c;有時候會提示“端口被占用”。如何快速的找到占用該端口的進程&#xff1f;網上有很多種方法&#xff0c;這里自己整理了下&#xff0c;使用DOS命令查詢端口并清除端口占用的程序&#xff0c;做個筆記。 windows系統下DOS命令&#xff1a; 1.查看端…

Python進階06 循環對象

Python進階06 循環對象 作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01; 這一講的主要目的是為了大家在讀Python程序的時候對循環對象有一個基本概念。 循環對象的并不是隨著Python的誕生就存在的…

使用 WordPress 主題制作的20個精美網頁

WordPress 是一款個人博客系統&#xff0c;并逐步演化成一款內容管理系統軟件&#xff0c;它是使用 PHP 語言和 MySQL 數據庫開發的。用戶可以在支持 PHP 和 MySQL 數據庫的服務器上使用自己的博客。這里給大家分享使用 WordPress 主題制作的20個精美網頁。 您可能感興趣的相關…

內存地址空間

一個存儲器(內存)被劃分為若干個存儲單元,一個存儲單元可存儲一個字節(Byte) CPU可尋址到多少個存儲單元即這些存儲單元就是CPU的內存地址空間 如8086CPU有20根地址線可尋址1M的存儲單元,那么這個1M個可尋址到的存儲單元就構成這個CPU的內存地址空間 而實際的存儲器可以是RA…

關于監聽與控制設備旋轉全解析(UIDeviceOrientationDidChangeNotification)

一類情況&#xff1a; 初始化app的方向&#xff0c;比如只支持橫屏或者豎屏。下面舉例只支持豎屏的案例 在app的屬性里面手動設置 上面標注了該app支持的方向種類&#xff0c;要是在app里支持Portrait方向&#xff0c;還需要添加以下代碼 二類情況&#xff1a; 上面的代碼表明a…

標志寄存器FLAG

FLAG標志寄存器按位操作&#xff0c;FLAG是16位寄存器&#xff0c;第0位為CF標志第2位為PF標志... 如圖(FLAG各標志位以及在DEBUG中對應的顯示)&#xff1a;

PHP 性能分析: Xhprof Xhgui

PHP 性能分析: Xhprof & Xhgui 轉載于:https://www.cnblogs.com/joshua317/articles/5072859.html

powerdesigner低版本打開高版本方式為只讀導致無法保存PD只讀read-only-mode

由于版本號不一致 打開PD文件后提示&#xff1a; 點擊【確定】后打開&#xff0c;點擊【取消】后打不開 但打開后修改完畢保存提示&#xff1a; 解決辦法&#xff1a; pdm文件實際上是個xml文件&#xff0c;直接用文本編輯器打開該文件修改版本號即可 把根節點最后的版本號改成…

字符串加解密

題目描述 題目描述 1、對輸入的字符串進行加解密&#xff0c;并輸出。 2加密方法為&#xff1a; 當內容是英文字母時則用該英文字母的后一個字母替換&#xff0c;同時字母變換大小寫,如字母a時則替換為B&#xff1b;字母Z時則替換為a&#xff1b; 當內容是數字時則把該數字加1&…

Win32 一個helloworld對話框

.386.model flat,stdcalloption casemap:none include windows.inc include user32.inc include kernel32.inc includelib user32.lib includelib kernel32.lib.data ;數據段titleS db helloworld,0 messageS db hello,welcome to win32,0.code ;代碼段start: invoke Messa…

Python補充06 Python之道

Python補充06 Python之道 作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei 歡迎轉載&#xff0c;也請保留這段聲明。謝謝&#xff01; Python有一個彩蛋&#xff0c;用下面語句調出&#xff1a; import this 該彩蛋的文檔記錄于PEP 20。 語句執行之后&…

傳送指令 MOV

MOV dest,src ;dest <-- srcMOV指令把一個字節或字從源地址src送入目的地址destsrc源操作數可以是立即數,寄存器,段寄存器,存儲單元MOV AX,10 ;MOV 寄存器,數據 eg-1MOV AX,BX ; MOV 寄存器,寄存器 eg-2MOV AX,[0] ;MOV 寄存器,內存單元 eg-3MOV [0],AX ;MOV 內存單元…