遇到个问题很困惑!
    我在一个js函数里面 先通过ajax获得一个拼成html字符串的返回, 比如说<a id="pid" href=''''> ..... 
将这个字符串赋给一个div的innerHTML,  然后紧接着我就 通过document.getElementById("pid") 想获得这个对象,
但始终是null,  大侠们有没有办法能通过id获得这个对象 ,,  求助!!!!     

解决方案 »

  1.   

    你可以先alert一下div
    贴代码!
      

  2.   

    只要确实 innerHTML = '<a id="pid"/>' 了,那么通过id肯定能获取到,
    我估计你的问题出在异步ajax上了。你是不是大致这样的?new Ajax.Request(url, {onSuccess: function(transport) {
     div.innerHTML = '<a href="pid"/>';
    }});
    alert(document.getElementById('pid'));这样是获取不到的。因为执行完Request,马上就会执行alert,这时候实际onSuccess动作还没有完成。
    两种办法解决,一种,把访问代码alert放入onSuccess中,另外一种设置request为同步执行,具体看你用的什么js框架了
      

  3.   

    确定div.innerHTML的div节点是已经加载到dom上了么.
    还有可能就是异步问题.代码贴出来吧.
      

  4.   

    感谢各位回答, 下面是我主要代码,  关键部分我用中文说明,  用了很久的脚本,最近有需求需要改造,
    其他地方不会有语法问题.  感谢帮忙看看function showChildNodes(link){
    var subTree = document.getElementById(link.subTree);

      /**
       *.....
       */

    var parts = link.parts;
    var url = link.href;

    var partIds = "/" + parts;
    var index = url.indexOf("$parts");
    var reqUrl;
    if (index != -1) {
    var url1 = url.substr(0, index);
    var url2 = url.substr(index);
    reqUrl = url1.replace(new RegExp("&sp=(.*)"), partIds + "&sp=$1");
    if (url1 == reqUrl) {
    reqUrl += partIds;
    }
    reqUrl += url2.replace("$parts", "");
    } else {
    reqUrl = url.replace(new RegExp("&sp=(.*)"), partIds + "&sp=$1");
    if (url == reqUrl) {
    reqUrl += partIds;
    }
    }

    var param = link.param;
    if (param!=null){
    reqUrl += param;
    }

    if(reqUrl.indexOf("&"+paramWorkStateName+"=")<0){
    var flag = getElement(paramWorkStateName);
    if(flag!=null){
    reqUrl += "&"+paramWorkStateName+"="+flag.value
    }
    }
    if(reqUrl.indexOf("&"+browseStateName+"=")<0){
    var browseFlag = getElement(browseStateName);
    if(browseFlag!=null){
    reqUrl += "&"+browseStateName+"="+browseFlag.value
    }
    }

    reqUrl += "&amp;rand=" + Math.random();

    var request = createXmlHttpRequest();
    var req = new Object();
    req.request = request;
    req.link = link;
    req.oncomplete = function(){
    var root = this.request.responseXML.documentElement;

    var partNodes = root.childNodes;
    var part = partNodes[0];
    var subTree = document.getElementById(this.link.subTree);
    if(part.attributes){
    if (subTree) {
    if (part.childNodes != null && part.childNodes.length > 0) {

    for (var ii = 0; ii < part.childNodes.length; ii++) {
    content += part.childNodes[ii].nodeValue;
    }
        
           //这里content 就是后台程序返回的相应, 格式大概如下<div><a id="pid"+变量 .../></div>
    if (subTree.innerHTML != content) {
    subTree.innerHTML = content;
    }

    }
    else{
    subTree.parentNode.removeChild(subTree);
    }
    link.className = "link_open";
    subTree.className = "subTree_open";
    link.loaded = true;
    }
    }

    hideLoadingMarker();

    var listener = this.link.loadListener;
    if(listener!=null){
    listener();
    }

    //然后这里我根据上面的pid+变量来获取这个对象 始终是null 
    getNodeId(this.link.priceId,this.link.parentId);
    var linkObj = document.getElementById("pid"+变量);
    alert(linkObj);
    if (linkObj)
     ....;


    }


    request.onreadystatechange = function(){
    if (req.request.readyState == 4) {
    if (req.request.status == 200){
    req.oncomplete();
    } else {
    alert("获取数据失败,请刷新页面");
    }
    }
    }

    request.open("get", reqUrl, true);
    request.send(null);
    return false;
    }
      

  5.   

    在你取值的时候ajax还没得到值吧
    觉得你应该要将获取数据相应的地方拿到值后再根据id进行获取
      

  6.   

    刚才又试了一把
    var linkObj = document.getElementById("pid"+变量); 
    我把这个变量直接改成那个对应的常量,  这个对象就可以获得到,  
    比如程序返回变量=1001 , 我直接写document.getElementById("pid1001"); 就可以获得对象,
    但这个变量alert出来的确是同一个值, 很奇怪
      

  7.   

    String ids = "pid"+变量;
    var linkObj = document.getElementById(ids);
    可能因为你那个变量是个数字的关系吧。
      

  8.   

    应该是你AJAX返回值的问题
    alert一下responseText看看能得到什么