- 浏览: 120469 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
Odysseus_110:
terryang 写道lz加上时间也不太合适,刷新太快的话还是 ...
$.getJSON 缓存 -
ll.james:
5楼的,真管用通知公告模块A.通知公告的类型没有实现控制B.通 ...
$.getJSON 缓存 -
zranye:
这样虽然能启动,但是会出现乱码
resin 无法启动 com.caucho.config.LineConfigException: -
酒杯中的大海:
学习了!!!~
struts 文件上传 乱码 -
酒杯中的大海:
牛逼,膜拜~
struts 文件上传 乱码
// Paging list // Written so that it can be easily subclassed, with easy access to // the parent constructor from the subclass. function PagingList(id, topItem, visibleItems) { if (arguments.length > 0) this.init(id, topItem, visibleItems); } PagingList.prototype.init = function(id, topItem, visibleItems) { this.id = id; this.idElt = document.getElementById(id); if (this.idElt == undefined) return; if (topItem != undefined) this.topItem = topItem; if (visibleItems != undefined) this.visibleItems = visibleItems; // We'll be showing/hiding this.listItemElt elements // By contract we can assume the list is the first UL element, // containing one LI element per list item. this.listElt = this.idElt.getElementsByTagName("ul")[0]; this.listItemElt = this.listElt.getElementsByTagName("li"); this.listLength = this.listItemElt.length; this.addPagers(); // Contract between presentation and behaviour states that the // list items are initially hidden. The list itself, however, is // displayed. This method displays each list item individually. this.showList(); } // Inherited unless overridden. PagingList.prototype.visibleItems = 9; PagingList.prototype.topItem = 0; // Add a pager to the list. // A pager's purpose is to page a list in a particular direction // by calling a list's function on receiving a focus event. // It adds a div element to the document with the appropriate ID // and class. // It's up to presentation to display this element appropriately. PagingList.prototype.addPagers = function() { var me = this; this.upPager = this.createPagerElt(function() { me.pageUp() }, this.id + "-pagerUp", "pager up"); this.downPager = this.createPagerElt(function() { me.pageDown() }, this.id + "-pagerDown", "pager down"); // Add to document before and after the list this.idElt.insertBefore(this.upPager, this.listElt); this.idElt.insertBefore(this.downPager, this.listElt.nextSibling); } PagingList.prototype.createPagerElt = function(fn, id, className) { var pagerElt = document.createElement("div"); // Assume id is unique. pagerElt.id = id; pagerElt.className = className; pagerElt.addEventListener("focus", fn, false); return pagerElt; } PagingList.prototype.pageUp = function() { // No paging: just refocus first item. if (this.topItem == 0) { this.moveFocusToItem(0); return; } // Never go above the first list item var newTop = Math.max(this.topItem - this.visibleItems, 0); // Focus goes to the item above the last CURRENTLY visible item // however much is paged. var newFocus = this.topItem - 1; this.pageTo(newTop, newFocus); } PagingList.prototype.pageDown = function() { // No paging: just refocus last item. if (this.topItem == this.listLength - this.visibleItems) { this.moveFocusToItem(this.listLength - 1); return; } // Mustn't show items past the end of the list. var newTop = Math.min(this.topItem + this.visibleItems, this.listLength - this.visibleItems); // Focus goes on the one below the last CURRENTLY visible item // however much is paged. var newFocus = this.topItem + this.visibleItems; this.pageTo(newTop, newFocus); } PagingList.prototype.pageTo = function(top, focus) { this.hideList(); this.topItem = top; this.showList(); this.moveFocusToItem(focus); } PagingList.prototype.moveFocusToItem = function(pos) { this.listItemElt[pos].focus(); } PagingList.prototype.showList = function() { for (var li = this.topItem; li < this.topItem + this.visibleItems; li++) { this.listItemElt[li].style.display = "block"; } } PagingList.prototype.hideList = function() { for (var li = this.topItem; li < this.topItem + this.visibleItems; li++) { this.listItemElt[li].style.display = "none"; } } // Initialise the page. function initPage() { var stateList = new PagingList("state-list"); //var stateList = new ScrollingList("state-list"); stateList.moveFocusToItem(0); } window.onload = initPage;
css:
/* Style sheet for paging-list.html */ body { margin: 0; background-color: #fc6; } #state-list { position: absolute; top: 100px; left: 20%; } .list { margin: 0; } .list h1 { display: none; } .list ul { margin: 0; padding: 0; } .list li { display: none; /* changed to display: block; by behaviour code */ background-color: #da4; border: 2px solid #b82; margin: 0.25em 0; padding: 0 0.5em; font: bold 16pt sans-serif; width: 10em; -ant-user-input: enabled; } .list li:focus { border: 2px solid #369; background-color: #69c; -ant-highlight-color: transparent; } /* These are created by the behavioural code. */ .pager { -ant-user-input: enabled; height: 1px; background-color: transparent; } .pager:focus { -ant-highlight-color: transparent; } /* Nothing extra */ .pager.up { } .pager.down { }
前段时间看老外一个翻页的代码,今天改到这儿,又看了一遍,发现这段代码中有两点需要做下笔记:
一:
this.idElt.insertBefore(this.downPager, this.listElt.nextSibling);
这里的nextSibling是js内置的对象,我的理解是紧挨着listELt的元素,但listElt只有一个元素,没有和它并列的元素,所以这里不太明白。
insertBefore类似于appendChild的功能,就是在父元素的子元素前面插入一个元素
parentElement.insertBefore( newElement, referenceElement);
又google一下,发现这里有很多人会遇到问题,大概是firefox(IE不会,没有试验过)会把空格或者换行符当做一个dom对象来处理,所以在使用nextSlibling的时候得不到元素:
写道
it's because Firefox considers the whitespace between element nodes to be text nodes (whereas IE does not) and therefore using .nextSibling on an element gets that text node in Firefox.
所以都会通过判断元素类型来处理:
/* Credit to John Resig for this function taken from Pro JavaScript techniques */ function next(elem) { do { elem = elem.nextSibling; } while (elem && elem.nodeType != 1); return elem; } var elem = document.getElementById('the_id'); var nextElem = next(elem);
或者:
Object.prototype.nextObject = function() { var n = this; do n = n.nextSibling; while (n && n.nodeType != 1); return n; }
二:
在js中给一个元素加入css的类,用空格代替样式表中的".":
this.upPager = this.createPagerElt(function() { me.pageUp() }, this.id + "-pagerUp", "pager up");
这里的pager up 在css中是pager类下面的up类 .pager .up{} (不知道如果想要加以id为标示的css类该怎么加)
参考:
http://stackoverflow.com/questions/868407/hide-an-elements-next-sibling-with-javascript
http://roseindia.net/javascript/javascript-insertbefore-method.shtml
发表评论
-
js 控制iframe 自适应高度
2014-06-13 17:30 588<iframe width="300& ... -
PS 积累
2012-08-30 09:26 0ps里面 将图片 resize的热键: mac: cmd+t ... -
js闭包
2012-08-26 11:25 0js闭包:一个函数嵌套在另外一个函数里面 js闭包的 ... -
HTML的一些小积累
2014-06-13 17:20 6361. position:absolute 使用 ... -
js notes
2014-06-14 09:26 6331 array and object definition ... -
javascript 模态窗口
2011-02-13 18:10 1020用jQuery Impromptu调试个模态窗口调到最后ie6 ... -
javascript 权威指南 学习笔记3:javascript 作用域
2011-02-13 18:00 1036var testvar = 'window属性'; var ... -
javascript 权威指南 学习笔记1
2011-02-05 23:32 1209If you attempt to read the v ... -
javascript 权威指南 学习笔记2: Comparison Operators
2011-02-05 23:31 4886Comparison Operators The mo ... -
javascript 权威指南 学习笔记3:Equality (==) and Identity (===)
2011-02-05 23:23 9875.4.1 Equality (==) and Identit ... -
sssssdfdsgsdgsdgsg
2010-06-03 08:58 0@import fail on IE7 and @i ... -
undefined
2009-10-17 11:33 0var exp = undefined ; if (ty ... -
读取json数据
2009-10-15 17:17 1616最近做的东西想要用js ... -
json 乱码解决办法
2009-06-29 08:38 1272上周在处理json输出值的时候发现输出的都是乱码,和jsp输出 ... -
galio浏览器的毛病
2009-06-25 17:04 947折腾了两天,终于找到原因了,不同浏览器之间的兼容性真是令人头痛 ... -
javascript 常用操作
2008-07-14 09:28 0<a href="vod1.html" ... -
div 横线
2008-06-14 22:36 2476今天写div,想用div写一条横线,但不管怎么调,div都太高 ... -
PS中存储为web格式图片会变大?
2008-06-09 15:56 0今天切图片,不知道为什么,中间的图片的width在ps中是72 ...
相关推荐
接下来,我们可以使用`childNodes`来获取所有子节点,`parentNode`获取父节点,`nextSibling`和`previousSibling`分别获取当前元素的下一个和上一个兄弟节点,`firstChild`和`lastChild`则分别获取第一个和最后一个...
- `nextSibling`和`previousSibling`属性可以获取指定元素的下一个和上一个兄弟节点,同样会考虑文本节点。 ### jQuery获取元素的方法 jQuery提供了更为简洁和强大的方法来获取父级元素、子级元素和兄弟元素。 1...
在本文中,我们将深入探讨`remove()`方法的用法,特别是如何通过传递选择器来过滤要删除的元素。 ### `remove()`方法的基本用法 `remove()`方法的基本语法是`$(selector).remove()`。这里,`selector`是一个jQuery...
2. `nextSibling`:返回当前元素的后一个兄弟元素。 在JavaScript中,我们可以利用这些属性来操作兄弟元素。例如,如果我们有一个ID为"s"的`<span>`元素,我们可以这样获取它的前一个兄弟元素: ```javascript var...
- `parents(expr)`:返回所有祖先元素,但可以使用表达式`expr`进行过滤。 例如: ```javascript $('span').parent(); // 获取的直接父元素 $('span').parents(); // 获取所有祖先元素 $('span').parents('.class')...
为了实现更复杂的筛选,可以编写函数来处理这些元素集合,根据特定条件过滤出需要的元素。 总的来说,DOM基础是JavaScript中进行动态网页开发的关键技能,通过熟练掌握DOM节点的操作和元素属性的控制,开发者可以...
在没有Element Traversal规范的情况下,开发者可能需要编写复杂的循环来过滤掉文本节点,如下所示: ```javascript var i, len, child = element.firstChild; while (child != element.lastChild) { if (child....
`Element`类提供了丰富的遍历和操作方法,如`children()`、`parent()`、`nextSibling()`、`prevSibling()`等,用于处理元素树结构。 8. **性能与最佳实践** - 为了提高效率,避免不必要的网络请求,可以缓存响应...
2. **遍历节点**:通过`childNodes`、`firstChild`、`lastChild`、`nextSibling`和`previousSibling`属性来访问和遍历节点。 3. **查找节点**:`getElementById`、`getElementsByTagName`、`getElementsByClassName`...
为了提高用户体验,我们还可以添加一些额外的功能,比如搜索过滤选项、键盘导航、动画效果等。同时,不要忘记通过CSS来调整选择层的样式,使其与页面设计保持一致。 总结来说,"点击输入框弹出一个选择层"的实现...
`firstChild`和`lastChild`分别返回第一个和最后一个子节点,`nextSibling`和`previousSibling`用于移动到下一个或上一个兄弟节点。 3. **查找特定节点**:使用`getElementsByTagName`,`getElementById`或`...
- `element.nextSibling`:获取元素的下一个兄弟节点。 - `element.previousSibling`:获取元素的上一个兄弟节点。 #### 获得节点信息 - `node.nodeName`:获取节点名称,对于元素节点返回标签名,属性节点返回属性...
因此,在使用时,可能需要借助正则表达式过滤掉这些非必要节点。 3. children属性提供了一个只包含元素节点的HTMLCollection。使用该属性获取子节点可以避免获取到非元素节点,是较为方便的方式。 4. firstChild和...
使用`previousSibling` 和 `nextSibling`属性,可以访问当前元素的前一个或后一个兄弟节点。例如,`obody.previousSibling.nodeName`将返回`<head>`的`nodeName`,`ohead.nextSibling.nodeName`则返回`<body>`的`...
4. `nextSibling` 和 `previousSibling`: 返回当前节点的下一个或上一个兄弟节点。 5. `parentNode`: 返回当前节点的父节点。 三、DOM遍历进阶 除了基础方法外,还有一些高级遍历技术: 1. `querySelector` 和 `...
- **`nextSibling`**: 下一个兄弟节点。 - **`previousSibling`**: 上一个兄弟节点。 - **`childNodes`**: 子节点列表。 - **`attributes`**: 元素的属性集合。 #### 三、浏览器兼容性处理 由于不同浏览器对 ...
通过过滤 `nodeType` 为1的节点,可以确保得到的是一致的元素节点集合。 例如: ```javascript function getElementChildren(element){ var children = [], oldChildNodes = element.childNodes; for(var i = 0,...
margin-left:-169px" onchange="this.parentNode.nextSibling.value=this.value"> ("ֶ")%>">("ʾֶ")%> (value.substring(0,1)=='-')value='';" onblur="if (value=='')value='';" style="width:100px;...