1

加载页面后,我进行数据库调用(通过 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>

列表加载完成后,我想根据我所在的页面动态加载内容,所以我抓取了页面 URL,在这种情况下可以说是 bla3。我想查看列表并获取包含 bla3 的 li 项的 URL(href)。

我想像下面这样的东西会起作用,但它不会。

$(document).ready(function() {
    $('#menu').on('load', function(){
        var pageID = $('#menu li a[href$="?bla3"]').attr('href');
        alert(pageID);
    });
});

问题(我假设)是#menu 加载速度不够快,因此加载事件在#menu 加载之前触发,我用body 尝试过,但也没有用。本质上,我只需要离开就可以查看动态生成的列表,并且它所在的页面已完全加载。

有任何想法吗?

4

2 回答 2

0

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

这是一个粗略的小提琴,似乎模拟了您所描述的内容:http: //jsfiddle.net/rkLVx/1/

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);

祝你好运

于 2013-06-19T02:10:36.560 回答
0
<body onload="findList()">

然后你需要这个功能在你的<head>

<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>
于 2013-06-19T01:28:06.497 回答