Thursday, 15 April 2010

dom - Javascript IE 7 getting OBJECT element -



dom - Javascript IE 7 getting OBJECT element -

i'm making code removes videoplayer page , places when needed (even if element doesn't have id). i'm finding issues ie7 here code:

var weboelem, weboelempar, weboelemindex, webostored; function weboremovevideoplayer(vpid){ weboelem = document.getelementbyid(vpid); if(!weboelem) homecoming false; weboelempar = weboelem.parentnode; weboelemindex = 0; var kid = weboelem; while( (child = child.previoussibling) != null ) weboelemindex++; weboelempar.removechild(weboelem); homecoming true; } function weboplacevideoplayerback(){ if(weboelempar.insertbefore !== undefined && weboelempar.childnodes !== undefined) { weboelempar.insertbefore(weboelem, weboelempar.childnodes[weboelemindex]); homecoming true; } homecoming false; } var result = document.evaluate( '//*/param[contains(@value, "autoplay=1")]/..', // xpath look document, // context node null, // namespace resolver xpathresult.ordered_node_snapshot_type ); if(result.snapshotlength > 0) { var node = result.snapshotitem(0); node.id = "webo"; document.getelementbyid('info').innerhtml = node.nodename.tolowercase()+" -> "+node.id; } else document.getelementbyid('info').innerhtml = "not found";

(note document.evaluate works because imported javascript-xpath library) on ie7 if xpath finds iframe there no problems , works if finds object nil , stops @ weboelem = document.getelementbyid(vpid); if didn't find id.

i tried modifying code this:

if(result.snapshotlength > 0) { var node = result.snapshotitem(0); node.id = "webo"; node.parentnode.removechild(node); document.getelementbyid('info').innerhtml = node.nodename.tolowercase()+" -> "+node.id; if(node.nodename.tolowercase() == "object") webostored = node; else webostored = null; } else document.getelementbyid('info').innerhtml = "not found";

and works, videoplayer disappears @ page load. want utilize function though, edited (storing node global var later in weboremovevideoplayer function):

var weboelem, weboelempar, weboelemindex, webostored; function weboremovevideoplayer(vpid){ if(!webostored) weboelem = document.getelementbyid(vpid); else weboelem = webostored; if(!weboelem) homecoming false; weboelempar = weboelem.parentnode; weboelemindex = 0; var kid = weboelem; while( (child = child.previoussibling) != null ) weboelemindex++; weboelempar.removechild(weboelem); alert("5"); homecoming true; } function weboplacevideoplayerback(){ if(weboelempar.insertbefore !== undefined && weboelempar.childnodes !== undefined) { weboelempar.insertbefore(weboelem, weboelempar.childnodes[weboelemindex]); homecoming true; } homecoming false; } // bind xpath methods document , window objects // note: overwrite native xpath implementation if exists //xpathjs.binddomlevel3xpath(); //solo per xpathjs var result = document.evaluate( '//*/param[contains(@value, "autoplay=1")]/..', // xpath look document, // context node null, // namespace resolver xpathresult.ordered_node_snapshot_type ); if(result.snapshotlength > 0) { var node = result.snapshotitem(0); node.id = "webo"; node.parentnode.removechild(node); document.getelementbyid('info').innerhtml = node.nodename.tolowercase()+" -> "+node.id; if(node.nodename.tolowercase() == "object") webostored = node; else webostored = null; } else document.getelementbyid('info').innerhtml = "not found";

this way code blocks when trying retrieve parent node.

could suggest me here?

ps: chrome , firefox code works in first version posted.

fixed it! solved issue wrapping object within div id of selection can retrieve whenever want. in resolvexpath function.

here code:

var weboelem, weboelempar, ieobject = false; var weboelemindex = 0; function weboremovevideoplayer(vpid){ var child; if(!ieobject) weboelem = document.getelementbyid(vpid); else weboelem = document.getelementbyid('my_usage'); if(!weboelem) homecoming false; weboelempar = weboelem.parentnode; weboelemindex = 0; kid = weboelem; while( (child = child.previoussibling) != null ) weboelemindex++; if(typeof weboelempar.removechild !== 'undefined') weboelempar.removechild(weboelem); else homecoming false; homecoming true; } function weboplacevideoplayerback(){ if(typeof weboelempar.insertbefore !== 'undefined' && typeof weboelempar.childnodes !== 'undefined' && typeof weboelempar.appendchild !== 'undefined'){ if(weboelempar.childnodes.length > 0 && weboelemindex < weboelempar.childnodes.length) weboelempar.insertbefore(weboelem, weboelempar.childnodes[weboelemindex]); else weboelempar.appendchild(weboelem); homecoming true; } homecoming false; } function resolvexpath(path) { //xpathjs.binddomlevel3xpath(); //solo per xpathjs var result = document.evaluate(path,document,null,xpathresult.ordered_node_snapshot_type); if(result.snapshotlength > 0){ var child, node = result.snapshotitem(0); if(node.nodename.tolowercase() == 'object'){ ieobject = true; kid = node; while( (child = child.previoussibling) != null ) weboelemindex++; var div = document.createelement('div'); div.id = 'my_usage'; if(typeof node.parentnode.insertbefore !== 'undefined' && typeof node.parentnode.childnodes !== 'undefined' && typeof node.parentnode.appendchild !== 'undefined'){ if(node.parentnode.childnodes.length > 0 && weboelemindex < node.parentnode.childnodes.length) node.parentnode.insertbefore(div,node.parentnode.childnodes[weboelemindex]); else node.parentnode.appendchild(div); div.appendchild(node); } else homecoming false; } else node.id = 'my_usage'; homecoming true; } else homecoming false; } resolvexpath('//*/param[contains(@src, "autoplay=1")]/..');

javascript dom

No comments:

Post a Comment