-
正常情况下offsetWidth,offsetHeigth获取元素的尺寸是足够了,但是某些元素比如SVG,MathML返回尺寸出错(这里不考虑)。即便如此CSS3还增加了一个box-sizing选择盒子模型,于是jQuery里面就引入augmentWidthOrHeight这个方法来处理因为box-sizing设置导致的尺寸问题,augmentWidthOrHeight方法其实就是对盒子模型的一个处理,所以jQuery获取一个元素的widht/height 都是,ele.offsetWidt/offsetHeigth + augmentWidthOrHeight()方法才可以。查看全部
-
scrollWidth、clientWidth、offsetWidth的区别 当textarea没有输入内容时,scrollWidth和clientWidth值一样; 当textarea输入值并且出现横向滚动条时,scrollWidth发生改变,clientWidth不变; 两种情况下offsetWidth的值均未改变,并且大于clientWidth; 可见,scrollWidth是对象实际内容的宽度,clientWidth是对象可见内容的宽度(不含边线),offsetWidth也是对象可见内容的宽度(含边线)查看全部
-
innerHTML的缺陷查看全部
-
.detach() 如果你想删除元素,不破坏他们的数据或事件处理程序(这些绑定的信息还可以在之后被重新添加回来)。.detach() 方法和.remove()一样, 除了 .detach()保存所有jQuery数据和被移走的元素相关联。当需要移走一个元素,不久又将该元素插入DOM时,这种方法很有用。 detach: function(selector) { return this.remove(selector, true); }查看全部
-
内部就会把 '<p>Test</p>' 通过buildFragment构建出文档elem,然后通过 this.parentNode.insertBefore( elem, this.nextSibling ); 这里的this 就是对应着inner ,elem就是‘<p>Test</p>’,看到这里就很好理解after的实现了。查看全部
-
createDocumentFragment有什么作用 多次使用节点方法(如:appendChild)绘制页面,每次都要刷新页面一次。效率也就大打折扣了,而使用document_createDocumentFragment()创建一个文档碎片,把所有的新结点附加在其上,然后把文档碎片的内容一次性添加到document中,这也就只需要一次页面刷新就可以了。查看全部
-
总结下来,domManip主要就做了两件事: 1.根据用户传入的参数,创建了多个fragment,然后通过回调函数参数传入 2.控制script的执行过程,在创建fragment的时候不执行,最后dom操作结束后会统一执行查看全部
-
/** * 一个简单的流程 * 用于描述文档处理的设计结构与流程 * * */ function buildFragment(elems, context) { var fragment = context.createDocumentFragment(), nodes = [], i = 0, elem, l = elems.length; for (; i < l; i++) { elem = elems[i]; //创一个元素div做为容器 tmp = fragment.appendChild(context.createElement("div")); //放到文档碎片中 tmp.innerHTML = elem; } return fragment; } function domManip(parentEles, target, callback) { var l = parentEles.length; var iNoClone = l - 1; if (l) { var fragment = buildFragment([target], parentEles[0].ownerDocument); first = fragment.firstChild; if (fragment.childNodes.length === 1) { fragment = first; } if (first) { callback.call(parentEles, first); } } } function append(parentEles, target) { return domManip([parentEles], target, function(elem) { parentEles.appendChild(elem) }); } $("button").click(function(){ append(document.getElementById('test'),'<div>通过append加入慕课网</div>' ) }) </script>查看全部
-
没看懂这节查看全部
-
DOM树的遍历: eq filter not children closest find查看全部
-
jQuery children() 方法 获得匹配元素集合中每个元素的子元素,选择器选择性筛选。 因为就jQuery可以是一个DOM的合集对象,所以children就需要遍历每一个合集中的直接子元素了,并且最后需要构建一个新的jQuery对象。 jQuery find() 方法 1、.find()方法返回被选元素的后代元素,一路向下直到最后一个后代。 2、.find()方法允许我们能够通过查找DOM树中的这些元素的后代元素,匹配的元素将构造一个新的jQuery对象。 3、.find()和.children()方法是相似的,但后者只是再DOM树中向下遍历一个层级。 4、.find()方法还可以接受一个选择器表达式,该选择器表达式可以是任何可传给$()函数的选择器表达式。如果紧随兄弟匹配选择器,它将被保留在新构建的jQuery对象中;否则,它被排除在外。 这个方法用的概率相当高,除了接受一个选择器外,还可以接受一个jQuery对象,我们可以看到.find()方法的内部实际上是调用的jQuery.find 也就是sizzle的引擎选择器。查看全部
-
元素本身绑定事件的顺序处理机制。 分几种情况: 假设绑定事件元素本身是 A,委派元素 B.C。 第一种: A,B,C各自绑定事件,事件按照节点的冒泡层次触发 第二种: 元素 A 本身有事件,元素还需要委派元素 B.C 事件 委派的元素 B.C 肯定是该元素 A 内部的,所以先处理内部的委派,最后处理本身的事件 第三种: 元素本身有事件,元素还需要委派事件,内部委派的元素还有自己的事件,这个有点绕 先执行 B,C 自己本身的事件,然后处理 B,C 委派的事件,最后处理 A 事件 为什么需要了解这个处理的顺序呢? 因为jQuery做委托排序的时候要用到。查看全部
-
文档片段继承了Node的所有方法,通常用于执行那些针对文档的DOM操作。如果将文档中的节点添加到文档片段中,就会从文档树中再看到该节点。添加到文档片段中的新节点同样也不属于文档树。可以通过appendChild()或insertBefore()将文档片段中内容添加到文档中。在将文档片段作为参数传递给这两个方法时,实际上只会将文档片段的所有子节点添加到相应的位置上;文档片段本身永远不会称为文档树的一部分。 createElement是创建一个新的节点,createDocumentFragment是创建一个文档片段。 DocumentFragment 接口表示文档的一部分(或一段)。更确切地说,它表示一个或多个邻接的 Document 节点和它们的所有子孙节点。 DocumentFragment 节点不属于文档树,继承的 parentNode 属性总是 null。 不过它有一种特殊的行为(非常有用): 即当请求把一个 DocumentFragment 节点插入文档树时,插入的不是 DocumentFragment 自身,而是它的所有子孙节点。这使得 DocumentFragment 成了有用的占位符,暂时存放那些一次插入文档的节点。它还有利于实现文档的剪切、复制和粘贴操作,尤其是与 Range 接口一起使用时更是如此。 可以用 Document.createDocumentFragment() 方法创建新的空 DocumentFragment 节点。 也可以用 Range.extractContents() 方法 或 Range.cloneContents() 方法 获取包含现有文档的片段的 DocumentFragment 节点。 除此之外,createElement创建的元素可以使用innerHTML,createDocumentFragment创建的元素使用innerHTML并不能达到预期修改文档内容的效果,只是作为一个属性而已。两者的节点类型完全不同,并且createDocumentFragment创建的元素在文档中没有对应的标记,因此在页面上只能用js中访问到。 createElement创建的元素可以重复操作,添加之后就算从文档里面移除依旧归文档所有,可以继续操作,但是createDocumentFragment创建的元素是一次性的,添加之后再就不能操作了查看全部
-
文档碎片 参考标准的描述,DocumentFragment是一个轻量级的文档对象,能够提取部分文档的树或创建一个新的文档片段,即有文档缓存的作用。 createDocumentFragment作用 多次使用节点方法(如:appendChild)绘制页面,每次都要刷新页面一次。效率大打折扣,而使用document_createDocumentFragment()创建一个文档碎片,把所有的新结点附加在其上,然后把文档碎片的内容一次性添加到document中,这也就只需要一次页面刷新就可以了。 DocumentFragment类型 在所有节点类型中,只有DocumentFragment在文档中没有对应的标记。DOM规定文档片段(documentfragment)是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外资源。DocumentFragment节点具有下列特征: 1. nodeType的值为11 2. nodeName的值为“#document-fragment” 3. nodeValue的值为 null 4. parentNode的值为 null 5. 子节点可以是 Element、ProcessingInstruction、Comment、Text、CDATASection 或 EntityReference 虽然不能把文档片段直接添加到文档中,但可以将它作为一个“仓库”来使用,即可以在里面保存将来可能会添加到文档中的节点。要创建文档片段,可以使用 document.createDocumentFragment()方法,如下所示: var fragment = document.createDocumentFragment();查看全部
-
元素父节点的获取方法ele.parentNode==ele["parentNode"]查看全部
举报
0/150
提交
取消