function next(elem){
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1 )
return elem;
}
var o = document.getElementsByTagName('h1')[0]
alert(next(o).innerHTML) //这样我可以 获得 h1的 next 元素的innerHTML我的问题是 怎么改 ,可以写成 o.next().innerHTML 这种样式
调试欢乐多
{
var d;
do{
d= this.nextSibling;
}while( d&& d.nodeType != 1 )
return d;
};
师兄 我也是这么写的,会出错的, Object.prototype = {
next : function(){
do{
elem = this.nextSibling;
}while(elem && elem.nodeType != 1)
return elem;
}
}
回楼主,不能给dom对象增加新的方法~·
所以就不能o.next().innerHTML
那 jQuery $('test').next() 这样怎么实现的(本人入门,看jquery源码吃力。),期待高手
o.next = function(){
var elem = this
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1 )
return elem;
}
alert(o.next().innerHTML)
师兄,这个方法倒是可以,但是我将它写成 var o = document.getElementsByTagName('h1')[0]
Object.prototype.next = function(){
var elem = this;
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1 )
return elem;
}
alert(o.next().innerHTML)就只能在标准DOM中运行,IE6运行不鸟
var o = document.getElementsByTagName('h1')[0]
alert(o instanceof Object) //ie下 为false ,ff下为true,所以next方法在ie下无效。怎么能达到兼容?
this.o = document.getElementById(id);
this.next = function() {
var elem = this.o;
do {
elem = elem.nextSibling;
} while (elem && elem.nodeType != 1)
return elem;
}
}
不好意思,少写了一句:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Untitled Page</title>
</head>
<body>
<div id="div1"></div>
<div id="div2">aaa</div>
<script type="text/javascript">
function $(id) {
this.o = document.getElementById(id);
this.next = function() {
var elem = this.o;
do {
elem = elem.nextSibling;
} while (elem && elem.nodeType != 1)
return elem;
}
return this;
} alert($("div1").next().innerHTML);
// 结果:aaa
</script>
</body>
</html>
首先 感谢这位师兄但是 你这样有些牵强吧,完全是为了 达到 $('test').next()... 的格式 而这样写。不太灵活啊
var obj = new $obj(document.getElementById(id));
return obj;
}
function $obj(obj){
this[0] = obj;
}
//扩展原型链上的方法。和jquery.fn上扩展是一样的。
$obj.prototype = {
next:function(){
//dosomething
},
html:function(){
}
}
感谢师兄,让我看到点眉目,
function $(id){
var obj = new $obj(document.getElementById(id));
return obj;
}
function $obj(obj){
this[0] = obj;
}
$obj.prototype.next = function(){
return 123;
}
alert($('test').innerHTML) //这里为什么 对象没能实例成功呢?需要 在$obj 里 return obj才可以,但是这样的话 $obj 的next方法又无效了 alert($('test').next()) // alert 123
有些 迷糊,,,,
return this[0].innerHTML;
}如果你直接调用jquery的innerHTML也是报错,和这个是一样的道理。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
<div id="myId">111</div>
<script type="text/javascript"> (function (window) {
var jQuery = function (selector) {
return jQuery.fn.init(selector);
}
jQuery.fn = jQuery.prototype = {
init: function (selector, context) {
//如果选择器是 id选择器
var elem = document.getElementById(selector);
if (elem) {
this.length = 1;
this[0] = elem;
}
this.selector = selector;
return this;
},
next: function () {
alert(this[0].innerHTML);
}
}; window.$ = jQuery;
})(window) //调用
$('myId').next();</script>
</body>
</html>
师兄,学习了,但是 我这样写 41行出错。
$("test").next().html is not a function<!doctype html>
<html>
<head>
</head>
<body>
<h1>h1</h1>
<h2 id="test">h2</h2>
<h3>h3</h3>
<script>
(function(){
var jQuery = function(selector){
return jQuery.fn.init(selector);
}
jQuery.fn = jQuery.prototype = {
init : function(selector){
var elem = document.getElementById(selector);
if( elem ){
this[0] = elem;
}
return this
},
html : function(){
return this[0].innerHTML;
},
next : function(){
var elem = this[0];
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1)
return elem;
}
}
window.$ = jQuery;
})()
alert( $('test').next().html() )
</script>
</body>
</html>
如
HTMLElement.prototype.next = function(){}
我觉得你写的有点问题。
next返回的对吗?
next : function(){
var elem = this[0];
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1)
return elem;
}
我更改后: next : function(){
var elem = this[0];
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1)
this[0]=elem;
return this;
}
我回帖时为什么没有工具栏了?代码就只能这样发了
var elem = this;
do {
elem = elem.nextSibling;
} while(elem && elem.nodeType != 1);
return elem;
}这个方法IE不支持。于是乎需要模拟一下IE下的HTMLElement
网上到处都是,
我给你看个demo
var DOMElement ={
extend: function(name,fn){//添加名称为name的方法fn
if(!document.all)//除了ie而外的浏览器都能够访问到HTMLElement这个类
eval("HTMLElement.prototype." + name + " = fn");
else{
// IE中不能访问HTMLElement这个类
// 为了达到同样的目的,必须重写下面几个函数
// document.createElement
// document.getElementById
// document.getElementsByTagName
// 这几个函数都是获得HTML元素的方法
// 修改这些方法,使得通过这些方法获得的每个元素拥有名称为name的方法fn var _createElement = document.createElement;
document.createElement = function(tag){
var _elem = _createElement(tag);
eval("_elem." + name + " = fn");//_elem[name] = fn;也可以达到同样的目的
return _elem;
} var _getElementById = document.getElementById;
document.getElementById = function(id){
var _elem = _getElementById(id);
eval("_elem." + name + " = fn");
return _elem;
} var _getElementsByTagName = document.getElementsByTagName;
document.getElementsByTagName = function(tag){
var _arr = _getElementsByTagName(tag);
for(var _elem=0;_elem<_arr.length;_elem++)
eval("_arr[_elem]." + name + " = fn");
return _arr;
}
}
}
};
//测试方法
DOMElement.extend("contents",function(){return this.innerHTML});
师兄更改之后,可以使用 next 方法,
但是 我很疑惑, 。
init : function(selector){
var elem = document.getElementById(selector);
if( elem ){
this[0] = elem; // 这个 this[0] 保存的 elem 是怎样被$('test') 引用的,下面 明明是 return this ,这个[0] 让我很头疼
}
return this
}
。 alert( $('test').html() )
$('test') 调用了 init方法
init 方法中将 elem赋给this[0],返回this
$('test')是等于this的。this[0]只是this中的一个对象
我是这样理解的。我基础也不是很好。this[0]这种写法我也是第一次遇到
呵呵,我疑惑的是
既然 this[0] = elem
也没见 $('test')[0] 来返回 elem 对象啊,
怎么直接 $('test')就可以了?
只有 jQuery 才有 next、html 方法,所以返回对象必须是jQuery
{
var d;
do{
d= this.nextSibling;
}while( d&& d.nodeType != 1 )
return d;
};
{
public:
next next;
o();
private:
class next
{
public:
void operator(){cout<<"a"<<endl;}int innerl;};
};
if( elem ){
this[0] = elem;
}
return this
},
html : function(){
return this[0].innerHTML;
},
next : function(){
var elem = this[0];
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1)
return elem;
}
if( elem ){
this[0] = elem;
}
return this
},
html : function(){
return this[0].innerHTML;
},
next : function(){
var elem = this[0];
do{
elem = elem.nextSibling;
}while( elem && elem.nodeType != 1)
return elem;
}
sadsad
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT=""> <script type="text/javascript">
function MyElements(tagname){
this.elem = document.getElementsByTagName(tagname)[0];
}
MyElements.prototype = {
constructor : MyElements,
next : function(){
do{
this.elem = this.elem.nextSibling;
}while( this.elem && this.elem.nodeType != true )
return this.elem;
}
}
window.onload=function(){
var elements1 = new MyElements("h1");
alert(elements1.next().innerHTML );
}
</script>
</HEAD> <BODY>
<h1>h1</h1>
<h1>h2</h1>
<h1>h3</h1>
<h1>h4</h1>
<h1>h5</h1>
<h1>h6</h1>
<h1>h7</h1>
<h1>h8</h1>
</BODY>
</HTML>
这个就可以实现,在IE6也是兼容的。
javascript中所有大写开头的对象都是可以new的,唯一一个可以new的(同样可以扩展prototype链)的小写对象就是function,其他小写对象都是不可以new的。