簡體   English   中英

在ul中訪問特定的li

[英]Accessing a specific li within a ul

看完過去的示例和我編寫的源代碼后,我似乎無法根據發送的參數來計算訪問特定<li><a>the value in this</a></li>中的值。

小樣:

  <ul class="selectBox-dropdown-menu selectBox-options size-dropdown mediumSelect footwear" style="top: 309px; left: 34px; display: none;">
    <li class="" style="display: none;"><a rel=""></a></li>
    <li class="size-not-in-stock"><a rel="3096786:6"> 6</a></li>
    <li class="size-not-in-stock"><a rel="3096787:6.5"> 6.5</a></li>
    <li class=""><a rel="3096788:7"> 7</a></li>
    <li class="selectBox-selected"><a rel="3096789:7.5"> 7.5</a></li>
    <li class=""><a rel="3096790:8"> 8</a></li>
    <li class=""><a rel="3096791:8.5"> 8.5</a></li><li><a rel="3096792:9"> 9</a></li>
    <li><a rel="3096793:9.5"> 9.5</a></li><li><a rel="3096794:10"> 10</a></li>
    <li><a rel="3096795:10.5"> 10.5</a></li><li><a rel="3096796:11"> 11</a></li>
    <li><a rel="3096797:11.5"> 11.5</a></li><li><a rel="3096798:12"> 12</a></li>
    <li><a rel="3096799:12.5"> 12.5</a></li><li><a rel="3096800:13"> 13</a></li>
    <li><a rel="3096801:14"> 14</a></li><li><a rel="3096802:15"> 15</a></li></ul>
  </ul>

這就是我想要得到的。 假設用戶輸入的值為7,好於它應該找到包含數字7的相應<li><a></a></li>並單擊它。

我的麻煩是要在其中找到該值,我知道我需要在<ul>使用find,但是讓我感到沮喪的是基於一個值。

更新:

我只想澄清一下,這將是一個自動過程,因此我正在嘗試做到這一點,因此除了加載頁面外,我無需執行任何操作。

你需要類似的東西

var test = "the content to seek";
$('ul.footwear').find('a').filter(function(idx, el){
    return $.trim($(this).text()) == $.trim(test);
}).closest('li').trigger('click')

演示: 小提琴

像其他所有解決方案一樣,無需遍歷並讀取每個元素的innerHTML。 您只需使用選擇器即可。

由於rel屬性似乎在:size結尾處具有您要獲取的數據,因此可以使用use :has()$=選擇器結尾來獲取您要獲取的lis。

var num = 7;
var elems = $(".footwear li:has(a[rel$=':" + num + "'])");
console.log(elems.length);

如果要單擊它,則可以調用.trigger("click") .click().trigger("click")

function findAndClick (size) {
    var elem = $(".footwear li:has(a[rel$=':" + size + "'])");
    elem.trigger("click");
} 

並在頁面加載時觸發它就像

$(window).on("load", function() { findAndClick(7); } );

或准備好文件

$( function() { findAndClick(7); } );

可悲的是,使用簡單的選擇器,該解決方案似乎很棒,但性能卻不如預期。 如果只有一個元素具有該大小,則最佳性能將是一個each()循環,並在找到一個元素時中斷該循環。 無需查看其他元素。


表現最好的是each()

function findAndClick (size) {
    var elem;
    size = size.toString();
    $('.footwear').find('a').each(function () {
        if ($.trim($(this).text()) == size) {   //compare the text
            elem = $(this).parent();  //set the element that contains the link 
            return false;  //exit each loop
        }
    });

    if (elem) {
        elem.trigger("click");  //fire click
    }
}

為了獲得更好的性能,無需閱讀元素文本或使用帶選擇符的結尾。 將數據屬性添加到元素。

<li data-size="7">

比起您只需要使用一個選擇器

function findAndClick (size) {
    $('.footwear li[data-size="' + size + '"]').trigger("click");
}

我將通過使您的結構更適合這些類型的查詢來優化此設置

<li id="10"><a rel="3096793:9.5"> 9.5</a></li><li><a rel="3096794:10"> 10</a></li>

在與a標記值相對應的li上放置一個id。

然后,您可以做一個簡單的$("#10")選擇器

雖然可以根據過濾器等制作復雜的選擇器,但請記住,對於非瀏覽器支持的選擇器(偽選擇器),性能通常不會很好

由於您擁有一個以內容rel屬性,因此可以使用此屬性:

$('a[rel$="\:'+valueToMatch+'"]').parent()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM