我有这样的功能:
$(document).ready(function () {
listproject() ;
});
listproject()
是一个函数,返回一个无序列表字符串,我已将其附加到文档中。
直到这里一切都好。我在HTML视图中有正确的列表。
在listproject()
之后我添加了一个代码行来显示我的第一个<li>
值,但结果未定义。
$(document).ready(function () {
listproject() ;
alert($('li:first').val());
});
如果我登录我的JavaScript控制台并选择监视表达式,则我的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;
}
现在你拥有了所有响应的元素,并再次思考。
答案 0 :(得分:1)
li
没有val()
- 该方法用于获取字段的值(例如input
或{{ 1}})
您可能需要select
.html()
答案 1 :(得分:1)
我怀疑$('li:first')
部分有效,但.val()
部分不是。他们应该处理表单项,例如复选框和选择。请参阅.val()
documentation。
尝试$('li:first').text()
或$('li:first').html()
编辑:您仍然收到未定义错误的原因是您的列表元素附加在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());
});
答案 2 :(得分:1)
li
个元素没有价值。要获取其内容,请使用.html()
方法。
答案 3 :(得分:1)
val返回一个表单元素的值,所以只有像输入选择textarea这样的元素才能返回带有该函数的东西,如果是li你需要使用text或html
alert($('li:first').text());
或
alert($('li:first').html());