HTML DOM Li 对象(手把手讲解)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2900+ 小伙伴加入学习 ,欢迎点击围观

(注:根据要求,实际输出内容从二级标题开始,此处仅为结构示意)

一、前言:为什么需要学习 HTML DOM Li 对象?

在网页开发中,列表(List)是最常见的内容组织形式之一。无论是菜单栏、任务清单还是商品列表,开发者都需要通过 <ul><ol><li> 标签来构建结构。而 HTML DOM Li 对象 则是操作这些列表项的核心工具。

想象一下,DOM(文档对象模型)就像一棵大树,每个 HTML 元素都是树上的枝叶。<li> 元素作为列表的“叶子”,其对应的 DOM 对象就像是为这些叶子赋予“生命”的接口——通过它,开发者可以动态修改文本、增删节点,甚至触发交互效果。

对于编程初学者而言,掌握 HTML DOM Li 对象 的操作方法,不仅能提升基础 HTML/CSS/JS 的综合能力,还能为后续学习前端框架(如 React、Vue)打下坚实基础。


二、基础概念:Li 对象的定义与特性

1. Li 对象的定义

Li 对象 是 HTML DOM 中 <li> 元素的接口表示。每个 <li> 标签在页面加载时,都会生成一个对应的 HTMLLIElement 对象。开发者可以通过 JavaScript 的 DOM 方法访问这些对象,例如:

// 通过 id 获取单个 <li> 元素  
const firstItem = document.getElementById("list-item-1");  
console.log(firstItem.nodeName); // 输出 "LI"  

2. Li 对象的层级关系

<li> 元素必须嵌套在 <ul>(无序列表)或 <ol>(有序列表)标签内,因此其父节点(parentNode)只能是这两种元素。这种层级关系类似于“树枝与叶子”的关系:

<ul>  
  <li>叶子1</li> <!-- 父节点是 <ul> -->  
  <li>叶子2</li>  
</ul>  

3. Li 对象的默认样式

浏览器默认会为 <li> 元素添加左侧的圆点(<ul>)或数字(<ol>),并通过 marginpadding 控制间距。开发者可以通过 CSS 或 DOM 操作动态修改这些样式。


三、核心方法:如何操作 Li 对象?

1. 访问 Li 对象的三种方式

(1)通过 getElementById()

<ul>  
  <li id="item1">第一个列表项</li>  
</ul>  
const item = document.getElementById("item1");  
item.style.color = "red"; // 动态修改文本颜色  

(2)通过 getElementsByClassName()

<ul class="task-list">  
  <li class="completed">任务1</li>  
  <li>任务2</li>  
</ul>  
const tasks = document.getElementsByClassName("task-list")[0].getElementsByTagName("li");  
for (let i = 0; i < tasks.length; i++) {  
  if (tasks[i].classList.contains("completed")) {  
    tasks[i].style.textDecoration = "line-through"; // 为已完成任务添加删除线  
  }  
}  

(3)通过 querySelectorAll()

// 选择所有 class 为 "highlight" 的 <li>  
const highlightedItems = document.querySelectorAll("li.highlight");  
highlightedItems.forEach(item => item.style.backgroundColor = "#ffffcc");  

2. 动态修改 Li 对象内容

(1)修改文本内容

const liElement = document.querySelector("li");  
liElement.textContent = "新的列表内容"; // 替换原有文本  
liElement.append(" - 补充说明"); // 追加文本  

(2)修改 HTML 内容(注意 XSS 风险)

// 动态插入超链接  
liElement.innerHTML = '<a href="https://example.com">点击跳转</a>';  

3. 操作 Li 对象的样式与属性

(1)直接修改内联样式

liElement.style.fontSize = "1.2em";  
liElement.style.cursor = "pointer"; // 鼠标悬停显示手型  

(2)添加/移除 CSS 类

liElement.classList.add("active"); // 添加类  
liElement.classList.remove("inactive"); // 移除类  
liElement.classList.toggle("highlight"); // 切换类状态  

四、进阶技巧:Li 对象的遍历与动态增删

1. 遍历列表项

const list = document.querySelector("ul");  
const items = list.getElementsByTagName("li");  

for (let i = 0; i < items.length; i++) {  
  items[i].addEventListener("click", function() {  
    this.style.backgroundColor = "lightblue"; // 点击高亮  
  });  
}  

2. 动态添加 Li 元素

// 创建新 <li> 元素  
const newLi = document.createElement("li");  
newLi.textContent = "新任务";  

// 将其插入到列表末尾  
const list = document.querySelector("ul");  
list.appendChild(newLi);  

3. 动态删除 Li 元素

// 删除第一个 <li>  
const firstLi = document.querySelector("li");  
firstLi.remove(); // 或使用 firstLi.parentNode.removeChild(firstLi);  

五、实战案例:可交互的待办事项列表

1. HTML 结构

<ul id="todo-list">  
  <li>学习 HTML DOM</li>  
  <li>练习 JavaScript</li>  
</ul>  

<input type="text" id="new-task" placeholder="添加新任务">  
<button onclick="addTask()">添加</button>  

2. JavaScript 实现

function addTask() {  
  const input = document.getElementById("new-task");  
  const taskText = input.value.trim();  

  if (taskText === "") return;  

  // 创建新 <li>  
  const newLi = document.createElement("li");  
  newLi.textContent = taskText;  

  // 添加删除按钮  
  const deleteBtn = document.createElement("button");  
  deleteBtn.textContent = "删除";  
  deleteBtn.onclick = function() {  
    newLi.remove(); // 删除当前项  
  };  

  newLi.appendChild(deleteBtn);  

  // 插入到列表  
  const list = document.getElementById("todo-list");  
  list.appendChild(newLi);  

  input.value = ""; // 清空输入框  
}  

六、常见问题与最佳实践

1. 如何避免 DOM 操作的性能问题?

  • 批量操作而非单次修改:例如,将多个 <li> 的样式修改操作集中执行,而非逐个修改。
  • 使用文档碎片(DocumentFragment):在内存中构建节点后再一次性插入 DOM,例如:
    const fragment = document.createDocumentFragment();  
    for (let i = 0; i < 100; i++) {  
      const li = document.createElement("li");  
      fragment.appendChild(li);  
    }  
    document.querySelector("ul").appendChild(fragment);  
    

2. 如何处理动态生成的 Li 元素的事件绑定?

避免直接在 HTML 中写 onclick 属性,改用事件委托:

document.querySelector("ul").addEventListener("click", function(event) {  
  if (event.target.tagName === "LI") {  
    event.target.style.color = "green"; // 针对 <li> 的点击事件  
  }  
});  

七、结论:掌握 Li 对象,解锁列表交互的无限可能

通过本文,我们系统学习了 HTML DOM Li 对象 的访问方法、操作技巧及实战案例。从基础的样式修改到动态增删列表项,开发者能够灵活控制网页中的列表内容,实现丰富的用户交互。

对于编程初学者,建议从简单的列表操作开始练习,逐步尝试事件绑定和数据绑定;中级开发者则可以结合框架(如 Vue 的 v-for 或 React 的 map())进一步探索列表的高级应用场景。

记住:DOM 操作是连接静态 HTML 与动态交互的桥梁,而 Li 对象 恰恰是这座桥梁上最灵活的“砖石”之一。通过不断实践,你将能更自信地构建出功能强大、用户体验优秀的网页应用!

最新发布