我有一个这样的功能:

$(document).ready(function () {
    listproject() ;
});


listproject()是一个函数,该函数返回我附加到文档的无序列表字符串。
直到这里一切都还好。我的HTML视图中有正确的列表。

listproject()之后,我添加了一条代码行以显示我的第一个<li>值,但结果未定义。

$(document).ready(function () {
    listproject() ;
    alert($('li:first').val());
});


如果我登录到JavaScript控制台并选择watch表达式,则存在jQuery对象$('li:first')

这是您的要求后我在列表项目中的返回字符串

<ul><li id="205">205<ul><li id="206">206<ul><li id="208">208</li><li id="209">209</li><li id="211">211<ul><li id="212">212</li><li id="213">213</li></ul></li></ul></li><li id="207">207<ul><li id="210">210</li></ul></li></ul></li></ul>


我将此返回值附加到我的html代码中的现有div上,这就是执行listproject()函数的结果,结果是确定的。

编辑:

在您的请求之后,这里是我的函数listproject()和makeTree函数,该函数返回listproject()的无序列表字符串:

function listproject() {
   $.post("/portail/project/home/getProjectList",
        function (d) {

            var pl = $("#tree").empty();

            if (d.length == 0) {

                pl.append($("<div>").addClass("align_center").html("there is no project"));
                return;
            }
           pl.append(makeTree(d,0));

      },
        "json"
    );


}

 function makeTree( a,level) {
            r = '' ;
            for ( i in a ) {
            if (a[i]['parentid'] == level ) {
            r = r + '<li id='+'"'+a[i]['id']+'"'+'>'+ a[i]['name'] + makeTree(a,a[i]['id'] ) + '</li>';
            }
           }
           if (r==''){r=''; }

           else { r= '<ul>' + r + '</ul>' ;}

           return r;
            }


现在,您具备了做出回应的所有要素,然后再考虑一下。

最佳答案

我怀疑部分有效,但$('li:first')位无效。他们应该处理表单项,例如复选框和选择项。请参见.val() documentation

尝试.val()$('li:first').text()

编辑:之所以仍然出现未定义的错误,是因为您的列表元素附加在AJAX请求中。顾名思义,这是异步完成的,因此在POST完成之前会调用警报。

因此,您需要一种方法来确保在邮寄通话结束后调用警报。基本方法是您传入的匿名函数的一部分:

function listproject() {
  $.post("/portail/project/home/getProjectList",
    function (d) {
      /* [your existing code here] */

      // That's all done, so now I can query it...
      alert($('li:first').text());
    }
  });
}


或者使用deferred(更好):

function listproject() {
  $.post("/portail/project/home/getProjectList",
    function (d) {
      /* [your existing code here] */
    }
  }).done(function() {
      // That's all done, so now I can query it...
      alert($('li:first').text());
  });
}


这里的另一个调整是,您可以使listproject返回延迟的值,并且可以在该函数之外使用它:

function listproject() {
  var deferred = $.post("/portail/project/home/getProjectList",
    function (d) {
      /* [your existing code here] */
    }
  });
  return deferred;
}
var deferred = listproject();
deferred.done(function() {
   // That's all done, so now I can query it...
   alert($('li:first').text());
});

09-25 18:12