前两天想用节点游走方式遍历图片处理。现在又遇到新问题。最先是 给图片加了 outHTML a过后 没有办法返回父节点,于是我在调用加表情前临时存了节点然后给主程序继续查节点,但是现在遇到一个问题,重复调用查节点函数会在第二次开始程序不进过程。直接返回一个字符串。。结构如下function aa(obj1)
{temp=null
.....
....
var temp= bb(obj1)
aa(temp)}function bb(obj)
{
if (obj.nextSibling)
return obj.nextSibling
....
.....
}现在的问题是,第一遍没有问题。
但是第二次运行到aa里面
var temp= bb(obj1) 这一句它就不进入bb过程了,
这个时候监视到 bb 为 object temp为 null
如果执行这一步道aa第一行,这时候 obj1 (也就是temp) 会变成一个字符串"OBJECT:XXXXX"
也就是对象名字,而不是对象本身
现在头痛为什么它不进过程,为什么会变成一个字符串???????
{temp=null
.....
....
var temp= bb(obj1)
aa(temp)}function bb(obj)
{
if (obj.nextSibling)
return obj.nextSibling
....
.....
}现在的问题是,第一遍没有问题。
但是第二次运行到aa里面
var temp= bb(obj1) 这一句它就不进入bb过程了,
这个时候监视到 bb 为 object temp为 null
如果执行这一步道aa第一行,这时候 obj1 (也就是temp) 会变成一个字符串"OBJECT:XXXXX"
也就是对象名字,而不是对象本身
现在头痛为什么它不进过程,为什么会变成一个字符串???????
现在代码已经改成完全节点游走。
PS:把代码帖全一点,好容易发现问题
[code]
function ReImgSize() //主调用函数
{
var objNode,imgWidth
if (arguments.length > 1){ //检测是否有参数
topID=arguments[0].toString()
objNode=document.getElementById(arguments[0].toString())
imgWidth=arguments[1];
if(objNode.childNodes.length>0) //有子节点才开始本次搜索
{
checkNodes(objNode.firstChild,imgWidth,topID)
}
}
else{
objNode=document.images
imgWidth=720
for(i=0;i<objNode.length;i++){
Resize(objNode[i],imgWith)}
}}
//检测子节点,如果本节点没有子节点结束,如果本节点已经是最后一个返回父级下一个。
function checkNodes(objNode,imgWidth,topID){ //检测是否需要改变和继续检测的ReImgSize外部函数
//if(objNode) {
if(objNode.id != topID)
{
var objTemp=null
if(objNode.nodeName.toLowerCase()=="img")
{var objTemp
objTemp=changeNode(objNode)
Resize(objNode,imgWidth) //先检测是不是图片是就马上开始重置大小
objNode=objTemp
} //由于图片改名后会添加外部A标签,改变其parentNode,所以临时先获取下一个检测节点。
if(objNode.childNodes.length>0)
checkNodes(objNode.firstChild,imgWidth,topID)
//如果有子节点转下一级。
var objTemp=changeNode(objNode,topID)
checkNodes(objTemp,imgWidth,topID) //继续检测下一个节点
}
//}
}
function changeNode(objNode,topID) //ReImgSize检查并移动到下一个节点的函数
{
if(objNode){
if(objNode.id == topID) //如果回到顶退出
return
{if(objNode.nextSibling) //有如兄弟节点有线移动到它
{
return objNode.nextSibling; //返回得到的下一个节点
}
else
changeNode(objNode.parentNode); //如果没有兄弟,重新检测其父节点的兄弟节点,调用本身。
}
}}function Resize(objImg,imgWidth){ //修改图片大小并添加连接的函数
if (document.all){
if (objImg.width>imgWidth)
{
objImg.width=imgWidth;
objImg.style.width=imgWidth;
try{
objImg.outerHTML='<a class="img" href="'+objImg.src+'" target="_blank" title="在新窗口打开原始大小图片">'+objImg.outerHTML+'</a>'
}catch(e){}
}
}
else{
if (objImg.width>imgWidth) {
objImg.title="在新窗口打开图片"
objImg.style.cursor="pointer"
objImg.onclick=function(e){window.open(this.src)}
}
}
}
[/code]
function ReImgSize() //主调用函数
{
var objNode,imgWidth
if (arguments.length > 1){ //检测是否有参数
topID=arguments[0].toString()
objNode=document.getElementById(arguments[0].toString())
imgWidth=arguments[1];
if(objNode.childNodes.length>0) //有子节点才开始本次搜索
{
checkNodes(objNode.firstChild,imgWidth,topID)
}
}
else{
objNode=document.images
imgWidth=720
for(i=0;i<objNode.length;i++){
Resize(objNode[i],imgWith)}
}}
//检测子节点,如果本节点没有子节点结束,如果本节点已经是最后一个返回父级下一个。
function checkNodes(objNode,imgWidth,topID){ //检测是否需要改变和继续检测的ReImgSize外部函数
//if(objNode) {
if(objNode.id != topID)
{
var objTemp=null
if(objNode.nodeName.toLowerCase()=="img")
{var objTemp
objTemp=changeNode(objNode)
Resize(objNode,imgWidth) //先检测是不是图片是就马上开始重置大小
objNode=objTemp
} //由于图片改名后会添加外部A标签,改变其parentNode,所以临时先获取下一个检测节点。
if(objNode.childNodes.length>0)
checkNodes(objNode.firstChild,imgWidth,topID)
//如果有子节点转下一级。
var objTemp=changeNode(objNode,topID)
checkNodes(objTemp,imgWidth,topID) //继续检测下一个节点
}
//}
}
function changeNode(objNode,topID) //ReImgSize检查并移动到下一个节点的函数
{
if(objNode){
if(objNode.id == topID) //如果回到顶退出
return
{if(objNode.nextSibling) //有如兄弟节点有线移动到它
{
return objNode.nextSibling; //返回得到的下一个节点
}
else
changeNode(objNode.parentNode); //如果没有兄弟,重新检测其父节点的兄弟节点,调用本身。
}
}}function Resize(objImg,imgWidth){ //修改图片大小并添加连接的函数
if (document.all){
if (objImg.width>imgWidth)
{
objImg.width=imgWidth;
objImg.style.width=imgWidth;
try{
objImg.outerHTML='<a class="img" href="'+objImg.src+'" target="_blank" title="在新窗口打开原始大小图片">'+objImg.outerHTML+'</a>'
}catch(e){}
}
}
else{
if (objImg.width>imgWidth) {
objImg.title="在新窗口打开图片"
objImg.style.cursor="pointer"
objImg.onclick=function(e){window.open(this.src)}
}
}
}
//if(objNode) { if(objNode.id != topID)
{
var objTemp=null
if(objNode.nodeName.toLowerCase()=="img")
{var objTemp
objTemp=changeNode(objNode)
Resize(objNode,imgWidth) //先检测是不是图片是就马上开始重置大小
objNode=objTemp
} //由于图片改名后会添加外部A标签,改变其parentNode,所以临时先获取下一个检测节点。
if(objNode.childNodes.length>0)
checkNodes(objNode.firstChild,imgWidth,topID)
//如果有子节点转下一级。
var objTemp=changeNode(objNode,topID)
checkNodes(objTemp,imgWidth,topID) //继续检测下一个节点
} //}
}
function aa(obj1)
{ var temp=null
.....
....
temp= bb(obj1)
aa(temp)
}
function ReImgSize() //主调用函数
{
var objNode=null,imgWidth=0,topID=null;
if (arguments.length > 1){ //检测是否有参数
topID=arguments[0].toString()
objNode=document.getElementById(arguments[0].toString())
imgWidth=arguments[1];
if(objNode.childNodes.length>0) //有子节点才开始本次搜索
{
checkNodes(objNode.firstChild,imgWidth,topID)
}
}
else{
objNode=document.images
imgWidth=720
for(i=0;i <objNode.length;i++){
Resize(objNode[i],imgWith)}
}
}
//检测子节点,如果本节点没有子节点结束,如果本节点已经是最后一个返回父级下一个。
function checkNodes(objNode,imgWidth,topID){ //检测是否需要改变和继续检测的ReImgSize外部函数
//if(objNode) {if(objNode.id != topID)
{
var objTemp=null
if(objNode.nodeName.toLowerCase()=="img")
{var objTemp
objTemp=changeNode(objNode)
Resize(objNode,imgWidth) //先检测是不是图片是就马上开始重置大小
objNode=objTemp
} //由于图片改名后会添加外部A标签,改变其parentNode,所以临时先获取下一个检测节点。
if(objNode.childNodes.length>0)
checkNodes(objNode.firstChild,imgWidth,topID)
//如果有子节点转下一级。
var objTemp=changeNode(objNode,topID)
checkNodes(objTemp,imgWidth,topID) //继续检测下一个节点
}//}
}
function changeNode(objNode,topID) //ReImgSize检查并移动到下一个节点的函数
{
if(objNode){
if(objNode.id == topID) //如果回到顶退出
return
{if(objNode.nextSibling) //有如兄弟节点有线移动到它
{
return objNode.nextSibling; //返回得到的下一个节点
}
else
changeNode(objNode.parentNode); //如果没有兄弟,重新检测其父节点的兄弟节点,调用本身。
}
}}function Resize(objImg,imgWidth){ //修改图片大小并添加连接的函数
if (document.all){
if (objImg.width>imgWidth)
{
objImg.width=imgWidth;
objImg.style.width=imgWidth;
try{
objImg.outerHTML=' <a class="img" href="'+objImg.src+'" target="_blank" title="在新窗口打开原始大小图片">'+objImg.outerHTML+' </a>'
}catch(e){}
}
}
else{
if (objImg.width>imgWidth) {
objImg.title="在新窗口打开图片"
objImg.style.cursor="pointer"
objImg.onclick=function(e){window.open(this.src)}
}
}
}
try{
objImg.outerHTML=' <a class="img" href="'+objImg.src+'" target="_blank" title="在新窗口打开原始大小图片">'+objImg.outerHTML+' </a>'
}catch(e){}
}
这里容易死循环, 还有就是不兼容...继续修改,把我可以在IE下运行的代码贴出来给大家 看看怎么解决循环和兼容问题function ReImgSize() //主调用函数
{
var objNode,imgWidth
if (arguments.length > 1){ //检测是否有参数
topID=arguments[0].toString()
objNode=document.getElementById(arguments[0].toString())
imgWidth=arguments[1];
if(objNode.childNodes.length>0) //有子节点才开始本次搜索
{
checkNodes(objNode.firstChild,imgWidth,topID)
}
}
else{
objNode=document.images
imgWidth=720
for(i=0;i<objNode.length;i++){
Resize(objNode[i],imgWith)}
}}
//检测子节点,如果本节点没有子节点结束,如果本节点已经是最后一个返回父级下一个。
function checkNodes(objNode,imgWidth,topID){ //检测是否需要改变和继续检测的ReImgSize外部函数
if(objNode.id != topID)
{
var objTemp=null
if(objNode.nodeName.toLowerCase()=="img")
{objTemp=changeNode(objNode)
Resize(objNode,imgWidth) //先检测是不是图片是就马上开始重置大小
objNode=objTemp
} //由于图片改名后会添加外部A标签,改变其parentNode,所以临时先获取下一个检测节点。
if(objNode.childNodes.length>0)
checkNodes(objNode.firstChild,imgWidth,topID)
//如果有子节点转下一级。
var objTemp=changeNode(objNode,topID)
if (objTemp=="end") return
checkNodes(objTemp,imgWidth,topID) //继续检测下一个节点
}}
function changeNode(objNode,topID) //ReImgSize检查并移动到下一个节点的函数
{
if(objNode){
if(objNode.id == topID) //如果回到顶退出
return "end"
if(objNode.nextSibling) //有如兄弟节点有线移动到它
return objNode.nextSibling; //返回得到的下一个节点
else
return changeNode(objNode.parentNode); //如果没有兄弟,重新检测其父节点的兄弟节点,调用本身。
}
}function Resize(objImg,imgWidth){ //修改图片大小并添加连接的函数
if (document.all){
if (objImg.width>imgWidth)
{
objImg.width=imgWidth;
objImg.style.width=imgWidth;
try{
objImg.outerHTML='<a class="img" href="'+objImg.src+'" target="_blank" title="在新窗口打开原始大小图片">'+objImg.outerHTML+'</a>'
}catch(e){}
}
}
else{
if (objImg.width>imgWidth) {
objImg.title="在新窗口打开图片"
objImg.style.cursor="pointer"
objImg.onclick=function(e){window.open(this.src)}
}
}
}
搞半天,其实都是你自己在研究你自己的东西,别人帮不上忙呀.