JavaScript-DOM-02

自定義屬性:

?
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.card{width: 100px;height: 100px;background-color: aqua;border: 1px solid black;}</style>
</head>
<body><!-- 固有屬性  id class style src href  --><!-- 自定義屬性 有時候我們希望自己存一些自己定義的屬性 作用:存值 --><!--我們希望就是目前是有一列商品 但是我希望點擊的時候 能夠跳轉到新的頁面 肉眼可見沒什么用,而是我們要想辦法就是讓程序也可以清晰可見 --><!-- 我們先自定義一個屬性名為Product-id  然后我點擊的時候我希望拿到這個屬性--><div class="card" product-id="1">商品</div><div class="card">商品</div><div class="card">商品</div><div class="card">商品</div><div class="card">商品</div></body>
<script>//我們先去拿到所有的商品 var getProducts=document.querySelectorAll('.card')console.log(getProducts);getProducts.forEach(function (ele,index) {// 拿到每一個div對象console.log(ele);console.log(ele.className);// 重點:這里我們取自定義屬性名的方法console.log(ele.getAttribute('product-id'));// 所以這里我們判斷 記住 null就是為false在前端是這樣的 我們用可以這種方法去存if(!ele.getAttribute('product-id')){// 大寫駝峰不識別ele.setAttribute('product-id',index)}})</script>
</html>?

事件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><!-- 1.通過標簽屬性綁定點擊事件  div onclick="函數調用"></div> 滿足了三個條件 事件源:div 事件類型:onclick或者是一個鼠標鍵盤的行為  事件源程序:放到onclick里面的--><div onclick="testOne(this)">這是一行字</div><button class="btn">第二綁定方式</button><!--  --><span>xxxx</span><button class="demo-btn">這是第二個按鈕</button><!-- 表單輸入標簽 --><input type="text" class="box"></body>
<script>// 事件重點中的重點 事件字面上來說就是可以被js檢測到的行為,點擊,拖拽,鍵盤,鼠標,對我這個網頁的交互行為// 我們針對用戶的行為去做代碼上的指定事情// 表單標簽就有輸入事件// 事件的三大部分// 事件源:比如我點擊一個按鈕 這個按鈕就是事件源// 事件類型:事件的觸發方式:單擊,雙擊 長按// 事件程序:對于這個事件源我要做什么事情,比如我點擊一個按鈕 右側要打開一個列表 那么打開的這個過程就是我們要寫的// 記住只要是事件 都包含兩個參數 一個是事件參數event自帶(保存一些事件相關信息) 一個是事件源的指向(this 本質就是自身的DOM對象)// 開發者工具切換設備仿真 鼠標點擊 和手機觸摸// 綁定的三種方式// 聲明一個函數 源程序的function testOne(_this) {console.log('你觸發了我,我真的謝謝你!!!');// 現在這個this指向整個html對象上去了  通過標簽屬性綁定的是沒有this的 除非在()里面聲明 需要手動傳入console.log(_this.innerText);}// 2.通過DOM對象.事件的綁定var btn=document.querySelector('.btn')// 直接寫事件 btn.onclick=function testTwo() {console.log("Two Two Two");}// 利用DOM對象.addEventListener 傳兩個參數 一個是綁定參數的類型 一個是源程序   那么第一個參數中如果是前綴有on的都可以不用寫document.querySelector('span').addEventListener('click',function testThree() {console.log("this is the third Method");console.log(event);console.log(this.innerText);})
</script>
<script>//   鼠標懸浮事件 鼠標移進去就修改顏色樣式var demoBtn=document.querySelector('.demo-btn')demoBtn.onmouseover=function(){console.log('dnksmxksmxksmsd');//但是移出去還沒有設置變回來demoBtn.style.backgroundColor='red'}demoBtn.onmouseout=function(){demoBtn.style.backgroundColor='green'   }// 鍵盤事件一般是用在表單輸入標簽上面 以及我們可以設置如果輸入非法字符就怎么樣的一個思路 以及視頻的快進(去判斷按的按鈕是否是左鍵右鍵 如果是前進幾秒倒退幾秒)var boxDom=document.querySelector('input')boxDom.onkeydown=function(){console.log(this);console.log(event);var test=''if(isNaN(event.key)){this.value=test}}// 文檔對象也能添加事件 表示說當我進入整個網站頁面 我點擊哪個觸發哪些事件</script>
</html>

冒泡事件:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="father">父親<button class="child">孩子</button></div></body><script>// 冒泡事件觸發的前提條件:// 嵌套層級上有相同的觸發事件類型var father =document.querySelector('.father')var child=document.querySelector('.child')father.onclick=function(){console.log('點擊了父親');event.stopPropagation()}// 當我點擊孩子的時候 父親這時候也觸發了兩個都觸發了 這個就是冒泡排序 一層一層往上觸發 先自己 然后哪一層有 就往上觸發child.onclick=function(){console.log('點擊了孩子');// 所以我們必須禁止冒泡 因為假如一個界面一個商品的界面有幾個立即購買,查看商品詳情 那么我不可能點一下同時觸發兩次。只停止自己的//  所以這種嵌套我們必須每一個function里面都寫event.stopPropagation()}</script>
</html>

默認事件:(了解 框架幫我們做好了)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="https://cn.bing.com/?form=000047&ocid=msedgntp&pc=CNNDDB&cvid=682bcc6ea3704a9688bbb3a3b06ac7b3&ei=10"><input type="text"><!-- 只要這邊有按鈕就會有提交效果,跳轉網頁到action的網址路徑中去 --><!--  如果我要輸入值校驗 來不及校驗就走掉 我們要在標簽提交前 去做校驗 --><button>提交</button></form></body>
<script>// 該方法阻止默認事件 比較少用 但是冒泡事件用得會比較多document.querySelector('form button').onclick=function(){// 這樣子我就可以安安心心地拿到所有值去判斷event.preventDefault()}</script>
</html>

節點操作:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.father{width: 100px;height: 100px;border: 1px solid black;}.title{width: 100px;height: 100px;background-color: aqua;}</style>
</head>
<body><!-- 一個標簽(不是在js)一般都是元素節點 一個是文本節點 --><!-- innnerHTML兩個都能夠修改  --><!-- innerText只能夠修改文本內容  --><div class="father"><div class="child">孩子 <span>x</span> <span>xxx</span></div><div class="brother">兄弟</div></div><div class="news-model"></div><!-- 創建一個按鈕 與節點刪除做測試 --><button onclick="del()">delll</button>
</body>
<script>// 現在就是要通過child去找它的兄弟 需要通過節點操作 因為如果有七八個的話沒必要
// 節點操作后面也是很少用 但是這個克隆節點 比如說彈幕點擊可以彈一個窗口回復(原來的位置保持不變)   或者說鼠標到彈幕停止滾動var chid=document.querySelector('.father .child')// 通過孩子可以找到父節點console.log(chid.parentElement);// 獲取孩子的子節點 目前只有文本節點 我再加一個span 比較少去取文本console.log(chid.childNodes);// 一般用這種方法去取 子元素節點console.log(chid.children);// -----------------------------// 現在去拿到父親節點var  father=document.querySelector('.father')// 拿到的是childconsole.log(father.firstElementChild);// 獲取下一個相鄰的兄弟console.log(chid.nextElementSibling);// child 找到里面的第一個span 然后可以一直往下找// console.log(chid.firstElementChild.nextElementSibling.nextElementSibling);// 優化 我們可以用這種方法直接找到最后一個span 基于已有childDOM對象再去找它內部的東西var  spanDOM=chid.querySelector('span:last-child')console.log(spanDOM);// 我們真正項目很少去寫DOM// 就是說我們要把這些數據打到頁面上去 之前的思路就是在body創建三個標簽 然后分別設置樣式 現在就是我們要根據這個數據去創建這樣的標簽// 1.先創建節點 括號表示要什么樣的標簽// 2.現在在代碼上我們得想辦法加到頁面上去  現在上面創建一個存放新聞的面板var newDOMS=document.createElement('div')var data=["今天下雨","XXX","sjdjnsjd"]console.log(newDOMS);// 補充:我們一般是在加入之前 把標簽的內容等構建好再加newDOMS.innerText='12235'newDOMS.classList.add('title')// 3.找到要添加的目標var targetNewModel=document.querySelector('.news-model')// 在內部往后加 一般是往后 括號填入創建好的 最初都是創建好的定死的,數據不可控 沒辦法根據數據的內容和數量去創建targetNewModel.appendChild(newDOMS)// 動態添加創建節點data.forEach(function (ele) {var newDOMS=document.createElement('div')newDOMS.innerText=ele// 在這邊我們也可以去添加事件newDOMS.onclick=function(){console.log('別再點我了 謝謝');}newDOMS.classList.add('title')targetNewModel.appendChild(newDOMS)// 所以只要我有數據我就可以根據數據的量和數據的內容去創建,動態的把頁面構建出來 現在的網站都這樣 數據不是定死 刷新一下可能就變了 都是利用DOM去操作的})// 節點刪除var btn11=document.createElement('button')btn11.innerText='mashang'// 加在body的最后面 只是測試document.querySelector('body').appendChild(btn11)function del(){console.log(btn11);// 調用該函數 刪除 代碼層面上還在 頁面上已經不存在了 btn11.remove()}// 節點克隆// 我現在想要把整個father節點給它克隆出來  沒有true的話克隆的只有當前father的元素   true的話就是father里面的元素也能夠被克隆//   與被克隆毫無相關var getDivFatherByClone=document.querySelector('.father').cloneNode()console.log(getDivFatherByClone);</script>
</html>

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

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

相關文章

Kind方式部署k8s單節點集群并創建nginx服務對外訪問

資源要求 請準備好doker環境&#xff0c;盡量用比較新的版本。我的docker環境如下 docker 環境&#xff1a; Docker version 20.10.21, build 20.10.21-0ubuntu1~18.04.3 安裝kind kind表現上就是一個二進制程序&#xff0c;下載對應版本并增加執行權限即可&#xff1a; cu…

MySQL備份恢復:數據安全的終極指南

引言 各位數據庫愛好者們好&#xff01;今天我們要深入探討MySQL數據庫的"生命保險"——備份與恢復策略 &#x1f6e1;?。在數據即資產的時代&#xff0c;任何數據丟失都可能造成災難性后果。本教程將帶你全面掌握從邏輯備份到物理備份&#xff0c;從二進制日志恢復…

id分頁遍歷數據漏行問題

令入參id為0 while(true){ select * from table where id>#{id} order by id asc limit 100; 取結果集中最大id作為下次查詢的入參 其他操作 } 這個算法一般沒問題&#xff0c;但在主從數據系統中&#xff0c;主庫寫&#xff0c;查詢從庫遍歷數據時&#xff0c;出現了…

OpenCV級聯分類器

概念 OpenCV 級聯分類器是一種基于 Haar 特征、AdaBoost 算法和級聯結構的目標檢測方法&#xff0c;通過多階段篩選快速排除非目標區域&#xff0c;實現高效實時檢測&#xff08;如人臉、行人等&#xff09;。 加載級聯分類器 // 加載級聯分類器CascadeClassifier cascade;// …

C++ inline 內聯函數

一、定義與設計初衷 inline 函數是 C 中通過 減少函數調用開銷 優化程序效率的機制。其核心設計初衷是 取代 C 語言中宏定義&#xff08;#define&#xff09;&#xff0c;同時解決宏的以下缺陷&#xff1a; 類型安全問題&#xff1a;宏僅進行文本替換&#xff0c;無法進行參數…

uniapp-商城-64-后臺 商品列表(商品修改---頁面跳轉,深淺copy應用,遞歸調用等)

完成了商品的添加和展示&#xff0c;下面的文字將繼續進行商品頁面的處理&#xff0c;主要為商品信息的修改的頁面以及后天邏輯的處理。 本文主要介紹了商品信息修改頁面的實現過程。首先&#xff0c;頁面布局包括編輯和刪除功能&#xff0c;未來還可添加上架和下架按鈕。通過c…

digitalworld.local: VENGEANCE靶場

1&#xff0c;將兩臺虛擬機網絡連接都改為NAT模式 2&#xff0c;攻擊機上做namp局域網掃描發現靶機 nmap -sn 192.168.23.0/24 那么攻擊機IP為192.168.23.182&#xff0c;靶場IP192.168.23.3 3&#xff0c;對靶機進行端口服務探測 nmap -sV -T4 -p- -A 192.168.23.3 端口號 協…

微店平臺店鋪商品接口開發指南

微店API獲取店鋪所有商品實現方案 以下是使用微店開放平臺API獲取店鋪所有商品的完整實現代碼&#xff0c;包含請求封裝、分頁處理和錯誤處理機制。 點擊獲取key和secret from weidian_api import WeidianAPI # 配置你的微店應用憑證 APP_KEY "your_app_key" APP_…

Proxmox 主機與虛擬機全部斷網問題排查與解決記錄

Proxmox 主機與虛擬機全部斷網問題排查與解決記錄 關鍵詞&#xff1a;Proxmox、e1000e、板載網卡、斷網、網絡橋接、Hardware Unit Hang、網卡掛死 背景 近期在使用 Proxmox VE 管理服務器時&#xff0c;遇到一個奇怪的問題&#xff1a;每當在某個虛擬機中執行某些操作&#x…

SpringBoot整合MQTT實戰:基于EMQX構建高可靠物聯網通信,從零到一實現設備云端雙向對話

一、引言 隨著物聯網(IoT)技術的快速發展&#xff0c;MQTT(Message Queuing Telemetry Transport)協議因其輕量級、低功耗和高效的特點&#xff0c;已成為物聯網設備通信的事實標準。本文將詳細介紹如何使用SpringBoot框架整合MQTT協議&#xff0c;基于開源MQTT代理EMQX實現設…

zData X zStorage 為什么采用全閃存架構而非混閃架構?

點擊藍字 關注我們 最近有用戶問到 zData X 的存儲底座 zStorage 分布式存儲為什么采用的是全閃存架構而非混閃架構&#xff1f;主要原因還是在于全閃存架構在性能和可靠性方面具有更顯著的優勢。zData X 的上一代產品 zData 的早期版本也使用了SSD盤作為緩存的技術架構&#x…

Fiddler抓包教程->HTTP和HTTPS基礎知識

1.簡介 有的伙伴可能會好奇&#xff0c;不是講解和分享抓包工具,怎么這里開始講解HTTP和HTTPS協議了。這是因為你對HTTP協議越了解&#xff0c;你就能越掌握Fiddler的使用方法&#xff0c;反過來你越使用Fiddler&#xff0c;就越能幫助你了解HTTP協議。 Fiddler無論對開發人員…

虛擬機NAT模式獲取不到ip

虛擬機NAT模式獲取不到ip 如圖所示 解決方案&#xff1a; 先查看NetworkManager是否啟動 systemctl status NetworkManager如果沒啟動就啟動一遍 使用DHCP手動獲取一遍ip sudo dhclient ens33成功得到ip 這是后遇到了另一個問題&#xff0c;ip釋放后&#xff0c;不能自動…

Sass 基礎用法速覽

Sass 基礎用法速覽 目錄 Sass 基礎用法速覽1. 什么是 Sass&#xff1f;2. 安裝 Sass2.1 使用 npm 安裝&#xff08;推薦&#xff09;2.2 使用 Dart Sass&#xff08;官方推薦&#xff09;2.3 使用 GUI 工具 3. Sass 基本用法3.1 編譯 Sass 4. Sass 語法詳解4.1 變量4.2 嵌套4.3…

洛谷B3840 [GESP202306 二級] 找素數

題目描述 小明剛剛學習了素數的概念&#xff1a;如果一個大于 1 的正整數&#xff0c;除了 1 和它自身外&#xff0c;不能被其他正整數整除&#xff0c;則這個正整數是素數。現在&#xff0c;小明想找到兩個正整數 A 和 B 之間&#xff08;包括 A 和 B&#xff09;有多少個素數…

idea部署本地倉庫和連接放送遠程倉庫

1.下載git&#xff0c;安裝好后任意地方又鍵會出現兩個帶git的東西 2.點擊bash here的那個&#xff0c;召喚出git的小黑窗&#xff0c;輸入 git config --global user.name "你自己取名" git config --global user.email "你自己輸入你的郵箱" 3.打開id…

C++(20): 文件輸入輸出庫 —— <fstream>

目錄 一、 的核心功能 二、核心類及功能 三、核心操作示例 1. 文本文件寫入&#xff08;ofstream&#xff09; 2. 文本文件讀取&#xff08;ifstream&#xff09; 3. 二進制文件操作&#xff08;fstream&#xff09; 四、文件打開模式 五、文件指針操作 六、錯誤處理技巧…

elementUI 循環出來的表單,怎么做表單校驗?

數據結構如下&#xff1a; diversionParamList: [ { length: null, positionNumber: null, value: null, } ] 思路&#xff1a;可根據 index 動態綁定 :props 屬性值&#xff0c;校驗規則寫在:rules <div class"config-item" v-for"(item, index) in form.…

x-cmd install | Pillager:Go 語言打造的敏感信息文件系統掃描利器

目錄 Pillager 的獨特優勢安裝Pillager 的應用場景Pillager 的核心功能 還在為文件系統中潛在的敏感信息泄露而擔憂嗎&#xff1f;Pillager 是一款由 Go 語言編寫的強大工具&#xff0c;旨在幫助你輕松掃描文件系統&#xff0c;發現隱藏的密鑰、密碼、API 令牌等敏感信息。 Pil…

大模型(2)——提示工程(Prompt Engineering)

文章目錄 一、提示工程的核心概念為什么需要提示工程&#xff1f; 二、提示設計的基本原則三、實用提示工程技巧1. 角色設定法2. 示例引導法&#xff08;Few-Shot Learning&#xff09;3. 分階段提問4. 負面約束5. 溫度&#xff08;Temperature&#xff09;控制 四、不同任務類…