Javascript 如何在动态创建的列表中查找字符串

Javascript 如何在动态创建的列表中查找字符串,javascript,jquery,load,Javascript,Jquery,Load,加载页面后,我进行数据库调用(通过ajax/php)以获得动态列表。列表显示良好,如下所示: <ul id="menu"> <li><a href="#page-bla">bla</a></li> <li><a href="#page-bla2">bla2</a></li> <li><a href="#page-bla3">bla3</a></li

加载页面后,我进行数据库调用(通过ajax/php)以获得动态列表。列表显示良好,如下所示:

<ul id="menu">
<li><a href="#page-bla">bla</a></li>
<li><a href="#page-bla2">bla2</a></li>
<li><a href="#page-bla3">bla3</a></li>
</ul>
问题(我假设)是#menu加载速度不够快,因此在#menu加载之前会触发on load事件,我在body上尝试过,但也没有成功。本质上,我只需要一段时间来查看动态生成的列表,然后它所在的页面就被完全加载了

有什么想法吗?


<body onload="findList()">
那么您的


函数findList(){
var list=document.getElementById(“菜单”).getElementsByTagName(“li”);
var contains=“bla3”;
var patt=新的RegExp(包含“g”);
对于(var x=0;x0){
var hrefVal=list[x].childNodes[0].href;
警报(hrefVal);
}
}
}

首先,您似乎需要一种方法来等待菜单。您可以尝试轮询元素的DOM

这是一把粗糙的小提琴,它似乎模拟了你所描述的:

var menuHasArrived=函数(fn){
log('checking…');
如果($('#菜单')。长度){
fn();
}否则{
setTimeout(函数(){
menuHasArrived(fn);
}, 1000);
}
}
menuHasArrived(函数(){
警报($('#菜单li a:contains(bla2')).attr('href');
});
setTimeout(函数(){
$('body')。追加(
“
    ”+ “
  • ”+ “
  • ”+ “
  • ”+ “
”); }, 2000);

祝你好运

你有任何警觉吗?删除
$(“#菜单li a[href$=”?bla3“])。attr('href')
应该是
$(“#菜单li a[href$=”bla3“])。attr('href')
实际上是什么?是一个打字错误,但不,我一点也没有得到警告。我将事件从load切换到hover,并将其瞄准了li,效果很好,因此pageID是正确的,load事件不起作用。您需要在问题中添加更多详细信息,您正在使用哪个插件等。。。试着摆好小提琴。加载事件是您正在使用的菜单插件提供的事件吗?我正在使用jquery,就是这样。on方法是jquery的一部分,加载事件是.on的属性。一把小提琴不能反映内容的动态特性(或者至少我不知道如何制作一把小提琴)。啊,好的。我不认为有加载事件的元素。据我所知,你们已经加载了文档或正文,但并没有加载元素。
<body onload="findList()">
<head>
<script type="text/javascript" language="javascript">
function findList() {
var list = document.getElementById("menu").getElementsByTagName("li");
var contains = "bla3";
var patt = new RegExp(contains,"g");
for (var x=0;x<list.length;x++) {
  if (list[x].match(patt).length>0) {
    var hrefVal = list[x].childNodes[0].href;
    alert(hrefVal);
  }
}
}
</script>
</head>
var menuHasArrived = function (fn) {
    console.log('checking...');
    if ($('#menu').length) {
        fn();
    } else {
        setTimeout(function () {
            menuHasArrived(fn);
        }, 1000);
    }
}

menuHasArrived(function () {
    alert($('#menu li a:contains(bla2)').attr('href'));
});

setTimeout(function () {
    $('body').append(
        '<ul id="menu">' +
        '<li><a href="#page-bla">bla</a></li>' +
        '<li><a href="#page-bla2">bla2</a></li>' +
        '<li><a href="#page-bla3">bla3</a></li>' +
        '</ul>');
}, 2000);