【问题标题】:Extract href with particular text提取带有特定文本的href
【发布时间】:2023-03-10 04:33:01
【问题描述】:

我在企业应用程序中动态生成了几个 a 标签,如下所示

<a href='JavaScript:SWESubmitForm(document.SWEForm1_0,s_1,"s_1_1_1_0","1-SXPINW")' onclick='Edit_SList__0__Control__Renew_SPO__onclick(null, "s_1_1_1_0")'  tabindex=2997  id='s_1_1_1_0'>Renew PO</a>
<a href='JavaScript:SWESubmitForm(document.SWEForm1_0,s_2,"s_1_1_4_0","1-SXP9NW")' onclick='Edit_SList__0__Control__XRXAddFunds__onclick(null, "s_1_1_4_0")'  tabindex=2997  id='s_1_1_4_0'>Add Funds</a>

我有以下 jQuery 代码来从标签中提取标识记录的唯一值

var href = $('a[href*="SWESubmitForm"]').attr('href');
var rowId = "";
    if( href != ""){
        hrefAr =  href.split('","');
        rowId = hrefAr[hrefAr.length - 1];
        rowId = rowId.substr(0,(rowId.length - 2));
    }

上面的代码给了我1-SXPINW的值 但我需要获得价值 1-SXP9NW (第二个链接,一页上可能有多个链接)。 我需要为文本添加过滤器,基本上只检索具有特定文本的链接的值,例如“添加资金”。

我知道可以使用 each 并添加 if 语句来检查文本,但我想通过过滤器来完成。

请帮忙!!!

编辑:

我认为我没有正确解释问题。我需要以这样的方式设置过滤器

if (text within a tag == "Add Funds") then get the value of ID within href attribute

我想根据标签中的 text() 设置我的过滤器。我希望它能更好地澄清问题。

【问题讨论】:

    标签: jquery filter siebel


    【解决方案1】:

    选择你想要的元素。如果有两个,只需使用 .eq() ,因为它返回所有匹配你的选择器的元素 - .eq 将返回一个 jquery 对象

    var href = $('a[href*="SWESubmitForm"]').eq(1).attr('href'); // <-
    

    或者转成dom元素

    var href = $('a[href*="SWESubmitForm"]')[1].href; 
    

    此外,由于您有一个 ID,您可以使用 ID 选择器选择您想要的一个

    var href = $('#s_1_1_4_0').attr('href');
    

    或者如果有太多,你需要找到一个 9NW.. 只需在你的支票中使用 indexOf

    $('a[href*="SWESubmitForm"]').each(function(){
         var rowId = ""; 
         if(this.href.indexOf('1-SXP9NW') > -1){ // <-- use indexOf to see if href contains the string                  
             hrefAr =  this.href.split('","');
             rowId = hrefAr[hrefAr.length - 1];
             rowId = rowId.substr(0,(rowId.length - 2));    
         }
    });
    

    带过滤功能

    var href = $('a[href*="SWESubmitForm"]').filter(function(){
             return this.href.indexOf('1-SXP9NW') > -1;
    }).attr('href');   
    

    毕竟......你为什么不直接使用这个选择器?

    $('a[href*="1-SXP9NW"]')
    

    编辑:

    如果Add Funds 是静态的.. 则使用:contains() 选择器

    var href = $('a:contains("Add Funds")').attr('href');
    

    【讨论】:

    • 正如我所说,它们是动态生成的,一页上可以有多个,并且顺序会随着时间而改变。所以我不能将我的解决方案建立在顺序上。我必须确保获得带有特定文本的标签的价值。
    • @user1017268 我用循环更新了我的答案..这将搜索在 href 中包含 1-SXP9NW 的元素
    • @user1017268 我用更多方法更新了我的答案来获得你想要的元素
    • 实际上行 id 是动态生成的,所以值 1-SXP9NW 会随着每个请求而改变。唯一静态的是 a 标签中的文本,例如“添加资金”。所以我需要检查 标记中的文本以获取动态生成的 id 值。我无法硬编码这个 id 值。
    • @user1017268 你可以使用:contains() 选择器然后.. 它在我的答案的最后更新中
    【解决方案2】:

    您可以使用.each() 循环访问您的链接并从 href 属性中提取您需要的值。

    $('a[href*="SWESubmitForm"]').each(function() {
        var rowId = "";
        var href = $(this).attr('href');
        if (href != "") {
            hrefAr = href.split('","');
            rowId = hrefAr[hrefAr.length - 1];
            rowId = rowId.substr(0, (rowId.length - 2));
            console.log(rowId);
        }
    });​
    

    【讨论】:

    • 无法使用过滤器在其中添加文本条件..所以我不必围绕它运行循环???
    • 您应该可以在此处使用 .filter() 代替 .each() 。我不确定你在用你拿回来的数据做什么,所以我坚持每一个。
    猜你喜欢
    • 1970-01-01
    • 2015-12-18
    • 2012-10-25
    • 1970-01-01
    • 2011-03-18
    • 2021-04-19
    • 2015-05-15
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多