iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
Modern Web

後轉前要多久系列 第 25

【後轉前要多久】# Day25 JS - 選取、操作DOM標籤

  • 分享至 

  • xImage
  •  

選擇HTML標籤元素

取得元素 getElementBy

document.getElementById('id') 回傳符合ID的單一物件,id前面不用加 #。因為id不會重複,只會回傳一筆資料。
document.getElementsByClassName('class') class前面不用加 .。回傳符合的陣列型式物件

選取器 querySelector

HTML

<body>
<h1 class="h1">
    <div class="class">Just For Test</div>
    <div class="class">Just For Test</div>
    <div class="class">Just For Test</div>
</h1>

<script src="index.js"></script>
</body>

querySelector 只針對符合的第一筆資料

var el = document.querySelector('.class');
console.log(el);
el.textContent = "成功執行!!";

querySelectorAll 多選,撈取符合的全部資料,回傳陣列

JS

var els = document.querySelectorAll('h1 .test'); // 多重選擇器 可以連結多個 Selector
console.log(els) // [div.test, div.test, div.test]

for(var i = 0; i < els.length; i++){
    els[i].textContent = "成功執行!!";
}

HTML標籤、欄位、屬性操作

取得欄位內容值

var data = document.getElementById('id').value;

改變標籤欄位內容值

document.getElementById('id').textContent = "抹茶";

取得欄位屬性

var a = el.getAttribute('href') // 取得`<a> href 屬性`

var el = document.querySelector('.h1 a');
var text = el.textContent;    // 取得標籤內容文字
var html = el.innerHTML;

改變欄位屬性

HTML

<body>
<h1 class="h1">
    <div class="class">Just For Test</div>
    <div class="class">Just For Test</div>
    <div class="class">Just For Test</div>
    <a href="#">我是連結</a>
</h1>

<script src="index.js"></script>
</body>

CSS

#website{
    background-color: yellow;
}

JS

var el = document.querySelector('.h1 a')
el.setAttribute('href','https://gjlmotea.com'); // 改變`<a> href 屬性`
el.setAttribute('id', 'website'); // 動態新增`id`,就可以吃到樣式了

動態操縱HTML標籤

兩種動態操縱HTML標籤的方式

  • innerHTML 組完字串對語法渲染,效能快,安全性較差(XSS跨站攻擊)。除非來源是可以信任的資料(自己的data)而非使用者輸入,否則盡量少用。
  • createElement 以DOM節點來處理,效率較差,安全性較高

innerHtmlinnerTexttextContent 比較

HTML

<body>
<p id="main">我是段落。</p>

<script src="index.js"></script>
</body>

JS

var el = document.querySelector('#main');

str = "<h1>今天天氣真好呀~</h1>"
el.innerHtml = str+str;

innerHtml

修改內部HTML(會覆蓋掉當前的HTML內容),可直接塞<tag>

範例

HTML

<body>
<ul class="list"></ul>

<script src="index.js"></script>
</body>

JS

var el = document.querySelector('.list')

var displayText = "Google";
var url = "https://google.com";

el.innerHTML = '<li><a href="'+ url + '">' + displayText + '</a></li>';

innerText

textContent 雷同
僅返回可見文本

textContent

塞進去的特殊符號文字會被轉碼成HtmlEncode
< : <
> : >

返回完整文本


創建元素 createElement

透過JS創建元素、描述元素節點,
再在掛載到其他節點上
不會動到、刪除到其他節點

新增子元素 appendChild

依序加在後面

HTML

<body>
<h1 class="h1">建立內容中...</h1>

<script src="index.js"></script>
</body>

CSS

.blue{
    color: blue;
}

JS

var str = document.createElement('p');  // 創建元素
str.textContent = "建立內容完畢!!"; // 描述內容
str.setAttribute('class','blue');
document.querySelector('.h1').appendChild(str); // 在母節點掛上欲掛載的子節點

上一篇
【後轉前要多久】# Day24 JS - JavaScript 物件、函式
下一篇
【後轉前要多久】# Day26 JS - 事件、監聽
系列文
後轉前要多久30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言