一:DOM对象的查找

DOM的查找到的对象,除byID的之外,返回的都是一个数组,并不是DOM对象无法调用DOM对象的方法。

通过id查找:

因为id在一个HTML文件中唯一,因此查找到的只会是一个元素对象以数组形式(对象,)返回。直接就把对象赋值给变量了。

var dEle = document.getElementById('d1')
<div id=​"d1" class=​"left">​…​</div>​
dEle.style.color = 'red'

通过其他选择器查找:

以标签选择器为例

var dEle = document.getElementsByTagName('div')
HTMLCollection(5) [div#d1.left,div.item, div.item, div.right, d1: div#d1.left]
//查找到了5个对象,以数组形式返回,赋值给了变量dEle
dEle.style.color = 'red'
VM279:1 Uncaught TypeError: Cannot set property 'color' of undefined
at <anonymous>:1:5
//程序报错,dEle并不是一个DOM对象,是一个数组,无法调用DOM的对象方法。

二:JQuery对象查找

以任何方式查找到的都是jQuery对象,但是有很大的可能,是多个元素的集合体。

以id选择器查找

var $d1Ele = $('#d1')
$d1Ele.css('color','yellow')

以类选择器查找

$('.item').length;
9
$('.item').css('color','red');

三:jQuery操作标签样式

踩坑点:左侧菜单实例

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>左侧菜单示例</title>
<style>
body {
width: 100%;
margin: 0;
height: 1000px;
}
.hide {
display: none;
}
.left {
width: 20%;
height: 100%;
background-color: #222222;
}
.item {
color: black;
margin-bottom: 15px; }
.title {
margin-top: 15px;
margin-bottom: 15px;
background-color: red;
}
.items {
background-color: blueviolet;
}
</style>
</head>
<body> <div id = 'd1' class="left">
<div class="menu">
<div clas="title">菜单一</div>
<div class="items">
<div class="item">111</div>
<div class="item">222</div>
<div class="item">333</div>
</div>
<div class="title">菜单二</div>
<div class="items hide">
<div class="item">111</div>
<div class="item">222</div>
<div class="item">333</div>
</div>
<div class="title">菜单三</div>
<div class="items hide">
<div class="item">111</div>
<div class="item">222</div>
<div class="item">333</div>
</div>
</div>
</div>
<div class="right"></div>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> <script>
$('.title').click(function () {
$('.items').addClass('hide');
$(this).next().removeClass('hide')
});
</script>
$('.title').click(function () {
$('.items').addClass('hide');
$(this).next().removeClass('hide')
});

画蛇添足,在操作jQuery对象修改CSS样式时,随手给类加了点变成('.hide'),直接GG,愚蠢的错误。

教训:要严格区分开对象的查找和CSS样式修改的差异化。

四:jQuery文档处理

把B元素追加到A元素内部的后面

$(A).append(B)// 把B追加到A
$(A).appendTo(B)// 把A追加到B

在这里需要注意,如果要把B元素追加A元素内部:

如果A元素是块级元素,那么B元素可以是文本字符,也可以是HTML标签

$('.c1')
w.fn.init [div#d1.c1, prevObject: w.fn.init(1)]
//$('.c1')是块级元素div $('.c1').append(p1Ele) //追加P标签
$('.c1').append('p1Ele') //追加文本'p1Ele'

如果A元素是行内元素,那么B元素只可以是文本字符,不能够追加HTML标签

五:clone()方法

在文件中第一次新增正常,第二次添加,出现同一元素被克隆两次

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>作业</title>
<style>
table {
text-align: center;
background-color: burlywood;
} td, th {
width: 100px;
height: 30px;
background-color: white;
} #b1 {
width: 105px;
height: 30px;
} .cover {
position: fixed;
background-color: darkgrey;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 9;
} .modal {
width: 600px;
height: 400px;
background-color: white;
position: fixed;
left: 50%;
top: 50%;
margin-left: -300px;
margin-top: -200px;
z-index: 10;
} .hide {
display: none;
}
</style>
</head>
<body>
<button id="b1">新增</button>
<div class="modal hide">
<p>
姓名
<input type="text" name="username">
</p>
<p>
爱好
<input type="text" name="hobby">
</p>
<input type="submit" value="提交">
<button id="b2">取消</button>
</div>
<div class="cover hide"></div> <table>
<thead>
<tr>
<th>#</th>
<th>姓名</th>
<th>爱好</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<tr>
<td class="num">1</td>
<td>egon</td>
<td>喊麦</td>
<td>
<button name='edit'>编辑</button>
<button name='del'>删除</button>
</td>
</tr>
<tr>
<td class="num">2</td>
<td>Alex</td>
<td>吹牛逼</td>
<td>
<button name='edit'>编辑</button>
<button name='del'>删除</button>
</td>
</tr>
<tr>
<td class="num">3</td>
<td>元昊</td>
<td>不洗头</td>
<td class="operate">
<button name='edit'>编辑</button>
<button name='del'>删除</button>
</td>
</tr>
</tbody>
</table>
<script src="../jquery-3.3.1.min.js"></script>
<script>
//新增功能
$('#b1').on("click", function () {
$('.hide').removeClass('hide');
});
//提交输入数据
$("input[type = 'submit']").on("click", function () {
var $name = $("input[name = 'username']");
var $hobby = $("input[name = 'hobby']");
if (!$name.val()){ }
var trEle = document.createElement('tr');
$('tbody').append(trEle); var tdEle1 = document.createElement('td');
$(tdEle1).text($('tbody>tr').length);
$(trEle).append(tdEle1); var tdEle2 = document.createElement('td');
$(tdEle2).text($name.val());
$(trEle).append(tdEle2); var tdEle3 = document.createElement('td');
$(tdEle3).text($hobby.val());
$(trEle).append(tdEle3); $(trEle).append($($('.operate')[0]).clone(true)); $('.modal').addClass('hide');
$('.cover').addClass('hide'); $name.val('');
$hobby.val(''); }); //取消新增
$("#b2").on("click", function () {
$("input[name = 'username']").val('');
$("input[name = 'hobby']").val('');
$('.modal').addClass('hide');
$('.cover').addClass('hide');
}); </script>
</body>
</html>

将上面之前出现错误的的代码拿下来分析:

$(trEle).append($('.operate').clone(true));
$(trEle).append($($('.operate')[0]).clone(true));
//以为选择器选取查找元素,上述表达式,在第一次clone时,会正常进行,第二次会变成二,第三次会变成六。
//这是因为,第一次克隆时,只找到一个元素,当克隆完成后,HTML中就有了两个class = 'operate'的元素了。因此就查
//找到了两个元素,然后这两个元素被拷贝,添加到新的一项中去
$(trEle).append($('.operate')[0].clone(true));
//对查找到的元素处理一下,只取第一个克隆,就避免了上面的问题。

持续踩坑中。。。。。。。。。

JS踩过的坑的更多相关文章

  1. react基础学习和react服务端渲染框架next.js踩坑

    说明 React作为Facebook 内部开发 Instagram 的项目中,是一个用来构建用户界面的优秀 JS 库,于 2013 年 5 月开源.作为前端的三大框架之一,React的应用可以说是非常 ...

  2. web开发实战--弹出式富文本编辑器的实现思路和踩过的坑

    前言: 和弟弟合作, 一起整了个智慧屋的小web站点, 里面包含了很多经典的智力和推理题. 其实该站点从技术层面来分析的话, 也算一个信息发布站点. 因此在该网站的后台运营中, 富文本的编辑器显得尤为 ...

  3. "开发路上踩过的坑要一个个填起来————持续更新······(7月30日)"

    欢迎转载,请注明出处! https://gii16.github.io/learnmore/2016/07/29/problem.html 踩过的坑及解决方案记录在此篇博文中! 个人理解,如有偏颇,欢 ...

  4. 第八篇:web之前端踩的一些坑

    前端踩的一些坑   前端踩的一些坑 本节内容 事件代理 清除标签的所有事件 bootstrap的模态框自定义方法 ajax在django里面实现post提交 ajax提交数据嵌套 1.事件代理 之前写 ...

  5. 使用vue开发项目需要注意的问题和可能踩到的坑

    最近,在公司给一些刚刚使用vue进行开发的同学做了一次分享, 其中包括一些vue开发中需要注意的点, 以及一些可能会踩到的坑.具体内容如下: 一.生命钩子使用需要注意的地方 1.beforeCreat ...

  6. react + antd 实现打印功能(踩了不少坑)

    最近在有网页打印需求,尝试了一下react的打印功能,遇到了不少的坑: 1.react本身有一些打印的组件,但都不好用,都是基于window.print(),但是window.print()如果直接打 ...

  7. 使用pace监控ajax踩过的坑

    使用vue.js开发移动端的活动页面时,有时候会出现因为请求的数据没有返回而使得当前活动页结构混乱或者不美观,这个时候可以考虑使用pace.js,通过设置参数值,在ajax全部请求结束之前显示load ...

  8. [坑况]——webpack搭建前端环境踩过的坑啊

    前言 嘿哈,webpack搭建前端环境踩过的坑啊! 第一个:完全不知所措 webpack4 下面用不了HtmlWebpackPlugin 和 ExtractTextPlugin 解决方案: html- ...

  9. 小程序——微信小程序初学踩过的坑

    微信小程序初学踩过的坑 一.前言     最近因为某些需要和个人兴趣打算开发一下微信小程序,经过在官方网站上的基本了解,我大体知道了微信小程序开发的大致过程,其实最本质的就是MVVM,借用了很多模式上 ...

随机推荐

  1. [知乎]老狼:深入PCI与PCIe之二:软件篇

    深入PCI与PCIe之二:软件篇 https://zhuanlan.zhihu.com/p/26244141 我们前一篇文章(深入PCI与PCIe之一:硬件篇 - 知乎专栏)介绍了PCI和PCIe的硬 ...

  2. Windows10 桌面显示 我的电脑

    桌面上面有我的电脑还是非常方便的 但是 不激活有时候没法选择: 方法 桌面空白处右键---个性化 然后在 个性化- 主题- 桌面图标设置 增加即可.

  3. CSS 报错

  4. 【原创】 PLSQL 索引排序优化

    转载请注明出处 select /*+INDEX_DESC(T IDX_SYS_MESS_CREATE_DATE)*/ * FROM sys_message T where t.create_date ...

  5. 51nod 1421 最大MOD值 | 暴力

    题面 有一个a数组,里面有n个整数.现在要从中找到两个数字(可以是同一个) ai,aj ,使得 ai mod aj 最大并且 ai ≥ aj. Input 单组测试数据. 第一行包含一个整数n,表示数 ...

  6. uoj318 [NOI2017]蔬菜 【贪心 + 堆 + 并查集】

    题目链接 uoj 题解 以前看别人博客,在考场上用费用流做,一直以为这题是毒瘤网络流题 没想到竟然是贪心模拟题... 如果只有一个蔬菜呢?这就是一个经典的普及难度的贪心,正着推面临优先选择的困难,而逆 ...

  7. 《Linux内核设计与实现》第3章读书笔记

    第三章 进程管理 一.进程 1.进程就是处于执行期的程序,但并不局限于可执行代码.实际上,进程是正在执行的程序代码的实时结果. 2.执行线程是在进程中活动的对象 每个线程拥有一个独立的计数器.进程栈. ...

  8. 2017 3 11 分治FFT

    考试一道题的递推式为$$f[i]=\sum_{j=1}^{i} j^k \times (i-1)! \times \frac{f[i-j]}{(i-j)!}$$这显然是一个卷积的形式,但$f$需要由自 ...

  9. golang interface 类型变量当作某个具体类型使用

    比如,我们定义了一个 struct type person struct { Name string `json:"name"` Age int `json:"age&q ...

  10. 【Asp.net入门3-02】使用jQuery-jQuery 入门

    下面的几小节将介绍jQuery的基础知识.如前所述,不可能仅仅通过一章的内容详细介绍jQuery, 但可以向你说明如何对HTML文档中的内容执行简单的操作,以及更重要的,如何逐步实现本书其他 部分的示 ...