0

这是网站页面源的一部分。我需要在最后一行抓住“ crsEdId=78 ”。使用 JavaScript 或 JQuery。

我将使用 mozilla Jetpack 来完成任务。

我怎样才能首先获得此代码?以及对它做什么(RegEx 或 JQuery)!?

<div class="tools-menu-body" id="tools-menu-div" style="display: none;">
        <div id="menu_glider">
            <div class="scroller">
                <div class="content">
                     <div class="section" id="courses_menu">
                        <ul class="tools-menu-ul">
                            <li class="tools-menu-back"><a href="#main_menu" class="controls">back</a></li>
<li><a title="Advanced Software Engineering Lab: Open Source Development" href="../Courses/CourseEdition.aspx?crsEdId=78">CSEN 914 </a></li>

有效 :

好吧,这是一件愚蠢的事情——我只需要将选择器放在点击功能中,不知道为什么我之前没有考虑过。

  jetpack.statusBar.append({
  html: "Boom<i>!</i>",
  width: 45,
  onReady: function(widget){
      $(widget).click(function(){
             var doc= jetpack.tabs.focused.contentDocument;
             var link= doc.querySelector('#courses_menu > ul > li:nth-child(2) a');
             var test= doc.getElementById('#container'); 
             jetpack.notifications.show("Course is is = "+ link);

});
}
});    

现在我需要得到这个课程菜单中的所有href!你能帮忙吗?

4

4 回答 4

1

也许我遗漏了一些东西,但你不能只得到那个元素的 href,然后使用 RegEx 来得到你想要的吗?

于 2010-01-15T01:16:56.260 回答
0

在 jQuery 中:

var matches = $('a').attr('href').match(/crsEdId=(\d+)/);
于 2010-01-15T01:17:53.557 回答
0

尝试:

alert($('#courses_menu').children('li').get(2).attr('href'));
于 2010-01-15T01:18:25.327 回答
0

如果您在当前选项卡中有文档,我相信 Jetpack 会像这样给您:

var doc= jetpack.tabs.focused.contentDocument;

然后在纯 JS 中,以最合适的方式获取链接。例如从第二个列表项中获取第一个链接:

var menu= doc.getElementById('courses_menu');
var link= menu.getElementsByTagName('li')[1].getElementsByTagName('a')[0];

如果您使用 Jetpack,您大概可以依靠足够新版本的 Firefox 来对 Selectors-API 提供本机支持,因此您可以更轻松地获得此功能,而无需使用 jQuery 等其他库,例如:

var link= doc.querySelector('#courses_menu>ul>li:nth-child(2) a');

现在,老式的 DOM 级别 0 为您提供了几个简单的属性,可以在链接中获取 URL 的各个部分,而无需求助于不可靠的正则表达式处理。如果你想要整个查询字符串crsEdId=78,你可以说:

var query= link.search.substring(1);

(子字符串是去掉任何前导?字符。)

如果可能有更多查询参数并且您想专门找到被调用的参数,则crsEdId必须完全处理查询,例如:

var crsEdId= getParameter(query, 'crsEdId');

function getParameter(query, name) {
    var pars= query.split(/[&;]/g);
    for (var i= pars.length; i-->0;) {
        var n= pars[i].split('=')[0];
        if (decodeURIComponent(n)===name)
            return decodeURIComponent(pars[i].substring(n.length+1));
    }
}
于 2010-01-15T01:47:35.483 回答