JavaScript + jQuery + DOM 速查手册
后端开发人员的前端速查字典,用到哪查到哪。
一、三个东西的关系
DOM :页面结构,HTML 被浏览器解析后的树形结构
JavaScript :浏览器原生语言,操作 DOM
jQuery :JS 的一个库,让 DOM 操作更简洁,符号是 $
二、DOM 核心概念
概念 解释 例子 节点 树上每个东西 <div>、"文字"元素节点 HTML 标签 <td>、<span>文本节点 标签里的文字 "发票明细"父节点 包着当前节点的 <td> 是 <span> 的父子节点 当前节点里面的 <span> 是 <td> 的子兄弟节点 同一层相邻的 两个 <td> 互为兄弟 属性 标签上的 key=value id="mini-51$2"
三、JavaScript 速查
3.1 获取元素
// 通过 id 获取,返回单个元素
document.getElementById("bottom-tabs");
// 通过 class 获取,返回类数组集合(多个元素)
document.getElementsByClassName("mini-tab");
// 通过标签名获取,返回类数组集合
document.getElementsByTagName("td");
// CSS 选择器,返回第一个匹配的元素
document.querySelector("#bottom-tabs .mini-tab");
// CSS 选择器,返回所有匹配的元素集合
document.querySelectorAll(".mini-tab");
3.2 读取 / 修改内容
el.textContent; // 取纯文本(含换行空格)
el.innerText; // 取可见文字(受 CSS 影响)
el.innerHTML; // 取内部 HTML(包含标签)
el.textContent = "新文字"; // 修改文本
el.innerHTML = "<b>新</b>"; // 修改 HTML
3.3 读取 / 修改属性
el.getAttribute("class"); // 取属性值
el.setAttribute("x", "y"); // 设置属性
el.removeAttribute("x"); // 删除属性
el.hasAttribute("x"); // 判断有没有 → true/false
el.id; // 标准属性直接用点访问 // 标准属性直接访问
3.4 修改 class
el.classList.add("active"); // 添加
el.classList.remove("active"); // 移除
el.classList.toggle("active"); // 切换
el.classList.contains("active"); // 判断有没有
3.5 修改样式
el.style.display = "none"; // 隐藏
el.style.display = ""; // 恢复
el.style.color = "red"; // 单个样式
el.style.cssText = "color:red;"; // 批量样式
3.6 DOM 树上爬
el.parentNode; // 父节点
el.children; // 所有子元素
el.firstElementChild; // 第一个子元素
el.previousElementSibling; // 前一个兄弟
el.nextElementSibling; // 后一个兄弟
el.closest(".mini-tab"); // 往上找最近的匹配祖先
3.7 创建 / 删除 / 替换
document.createElement("div"); // 创建
el.appendChild(newEl); // 追加到末尾
el.insertBefore(newEl, target); // 插入到某个元素前面
el.remove(); // 删除自己
el.replaceWith(newEl); // 替换自己
3.8 循环
var list = document.querySelectorAll(".mini-tab");
for (var i = 0; i < list.length; i++) {
console.log(list[i]);
}
list.forEach(function (el) {
console.log(el);
});
四、jQuery 速查
4.1 核心选择器
$("#bottom-tabs"); // 通过 id
$(".mini-tab"); // 通过 class
$("td.mini-tab"); // CSS 选择器
4.2 查找关系
$("#x").find(".y"); // 往下找所有子元素
$("#x").children(".y"); // 只找直接子元素
$(".y").parent(); // 往上找直接父
$(".y").closest(".z"); // 往上找最近的匹配祖先
$("#x").next(); // 下一个兄弟
$("#x").prev(); // 上一个兄弟
$("#x").siblings(); // 所有兄弟
$("#x").first() // 第一个
$("#x").last() // 最后一个
$("#x").eq(2) // 第 3 个
4.3 内容操作
$("#x").html(); // 取 HTML
$("#x").html("<b>新</b>"); // 设 HTML
$("#x").text(); // 取文本
$("#x").text("新"); // 设文本
$("#x").empty(); // 清空
$("#x").append("<p>尾</p>"); // 内部末尾追加
$("#x").prepend("<p>头</p>"); // 内部开头插入
$("#x").after("<p>外后</p>"); // 外部后面插入
$("#x").before("<p>外前</p>"); // 外部前面插入
4.4 属性操作
$("#id").attr("href"); // 取属性
$("#id").attr("href", "新地址"); // 设属性
$("#id").removeAttr("href"); // 删属性
$("#id").val(); // 取表单值
$("#id").val("新值"); // 设表单值
$("#id").data("title"); // 取 data-title
$("#id").data("title", "新标题"); // 设 data-title
4.5 class 操作
$("#x").addClass("active"); // 添加
$("#x").removeClass("active"); // 移除
$("#x").toggleClass("active"); // 切换
$("#x").hasClass("active"); // 判断
4.6 样式操作
$("#id").css("color"); // 取样式
$("#id").css("color", "red"); // 设单个
$("#id").css({color: "red"}); // 批量
$("#id").show(); // 显示
$("#id").hide(); // 隐藏
$("#id").toggle(); // 切换
4.7 替换 / 删除
$("#old").replaceWith("<div>新</div>"); // 替换
$("#old").remove(); // 删除
4.8 循环遍历
$(".mini-tab").each(function (index, el) {
var text = $(this).find(".mini-tab-text").text().trim();
if (text === "发票明细") {
$(this).hide();
return false; // 相当于 break
}
});
五、原生 JS 与 jQuery 对照速查
操作 原生 JS jQuery id 选择 document.getElementById("x") $("#x")class 选择 getElementsByClassName("x")$(".x")选择器 querySelectorAll("x") $("x")往下找 el.querySelectorAll(".x") $el.find(".x")往上找 el.closest(".x") $el.closest(".x")父节点 el.parentNode $el.parent()下一个兄弟 el.nextElementSibling $el.next()取文本 el.textContent $el.text()设文本 el.textContent = "x" $el.text("x")取 HTML el.innerHTML $el.html()设 HTML el.innerHTML = "x" $el.html("x")取属性 el.getAttribute("x") $el.attr("x")设属性 el.setAttribute("x","y") $el.attr("x","y")删属性 el.removeAttribute("x") $el.removeAttr("x")加 class el.classList.add("x") $el.addClass("x")删 class el.classList.remove("x") $el.removeClass("x")设样式 el.style.display = "none" $el.css("display","none")隐藏 el.style.display = "none" $el.hide()显示 el.style.display = "" $el.show()替换 el.replaceWith(newEl) $el.replaceWith("html"删除 el.remove() $el.remove() 追加 el.appendChild(child) $el.append("html")循环 for / forEach $el.each(function(){})
六、实战:完整隐藏 Tab 示例
/**
* 按标题隐藏 Tab
*/
function hideTabByTitle(title) {
$("#bottom-tabs").find(".mini-tab").each(function () {
var tabName = $(this).find(".mini-tab-text").text().trim();
if (tabName === title) {
$(this).hide();
$(this).next(".mini-tabs-space2").hide();
return false;
}
});
}
/**
* 显示所有 Tab
*/
function showAllTabs() {
$("#bottom-tabs").find(".mini-tab").show();
$("#bottom-tabs").find(".mini-tabs-space2").show();
}
对应代码
<div class="mini-tabs clear-float mini-tabs-position-top" id="bottom-tabs"
style="border-width: 0px; height: 100%; padding: 0px;">
<table class="mini-tabs-table" cellspacing="0" cellpadding="0">
<tbody>
<tr style="width:100%;">
<td></td>
<td style="text-align:left;vertical-align:top;width:100%;">
<div class="mini-tabs-scrollCt" style="padding-right: 0px; width: 1599px;">
<div class="mini-tabs-nav" style="display: none;"><a class="mini-tabs-leftButton mini-disabled"
href="javascript:void(0)" hidefocus=""
onclick="return false"></a><a
class="mini-tabs-rightButton mini-disabled" href="javascript:void(0)" hidefocus=""
onclick="return false"></a></div>
<div class="mini-tabs-buttons" style="display: block;"></div>
<div class="mini-tabs-headers mini-tabs-header-top" style="width: auto;">
<table class="mini-tabs-header" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="mini-tabs-space mini-tabs-firstSpace">
<div></div>
</td>
<td title="" id="mini-51$1" index="0" class="mini-tab mini-tab-active" style=""><span
class="mini-tab-text">数量明细</span></td>
<td class="mini-tabs-space2">
<div></div>
</td>
<td title="" id="mini-51$2" index="1" class="mini-tab " style=""><span
class="mini-tab-text">发票明细</span></td>
<td class="mini-tabs-space2">
<div></div>
</td>
<td title="" id="mini-51$3" index="2" class="mini-tab " style=""><span
class="mini-tab-text">车号明细</span></td>
<td class="mini-tabs-space2">
<div></div>
</td>
<td title="" id="mini-51$4" index="3" class="mini-tab " style=""><span
class="mini-tab-text">车统33并车统36</span></td>
<td class="mini-tabs-space mini-tabs-lastSpace" style="width: 100%;">
<div></div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="mini-tabs-bodys mini-tabs-body-top" style="padding: 0px; width: 1601px; height: 259px;">
<div id="mini-51$body$1" class="mini-tabs-body mini-tabs-hideOverflow"
style="overflow: hidden; height: 259px;">
<iframe name="mini-iframe-102"
src="http://192.168.10.225:9937/hcys/hcys/saopaccountjzgzdetail.do?retrieve=true&accountId=JgWoCnPWqjikHVYp&assoId=H7tPZpmRmBkmmDGm&_t=459317&_winid=w7195"
style="width:100%;height:100%;" frameborder="0"></iframe>
</div>
<div id="mini-51$body$2" class="mini-tabs-body " style="overflow:hidden;display:none;"></div>
<div id="mini-51$body$3" class="mini-tabs-body " style="overflow:hidden;display:none;"></div>
<div id="mini-51$body$4" class="mini-tabs-body " style="overflow:hidden;display:none;"></div>
</div>
</td>
<td></td>
</tr>
</tbody>
</table>
</div>
Comments