Find elements using part of ID

前端 未结 6 1511
予麋鹿
予麋鹿 2021-01-05 05:54

I have, the div\'s where id looks like this_div_id_NUMBER, all div\'s has the different NUMBER part. How I find all

相关标签:
6条回答
  • 2021-01-05 06:23

    querySelectorAll

    querySelectorAll takes CSS selectors and returns a HTMLNodeList (a kind of array) of all the elements matching that css selector.

    The css selector ^ (starts with) can be used for your purpose. Learn more about it in this article.

    For your case, it would be document.querySelectorAll("[id^='this_div_id']");

    Note that querySelectorAll doesn't return a live node list. That means, any changes to the dom would not be updated live in the return value of the function.

    Another method would to assign all your elements a specific class and then you can use getElementsByClassName (which is much faster than querySelector).

    var divs = document.getElementsByClassName("divClass");
    
    0 讨论(0)
  • 2021-01-05 06:27

    Just using attribute selector like below:
    $("[id^='this_div_id_']")

    0 讨论(0)
  • 2021-01-05 06:34

    you can use querySelectorAll to hit partial attribs, including ID:

    document.querySelectorAll("[id^='this_div_id']")
    

    the ^ next to the equal sign indicates "starts with", you can use * instead, but it's prone to false-positives.

    you also want to make sure to use quotes (or apos) around the comapare value in attrib selectors for maximum compatibility on querySelectorAll; in jQuery and evergreen browsers it doesn't matter, but in vanilla for old browsers it does matter.

    EDIT: late breaking requirement needs a more specific selector:

    document.querySelectorAll("[id^='this_div_id']:not([id$='_test_field'])");
    

    the not() segment prevents anything ending with "_test_field" from matching.


    proof of concept / demo: http://pagedemos.com/partialmatch/

    0 讨论(0)
  • 2021-01-05 06:42

    It is better to use classes. But there is one solution that you need (assuming you use jQuery):

    $("*[id^='this_div_id']")
    
    0 讨论(0)
  • 2021-01-05 06:45

    Using attribute selectors:

    div[id^="this_div_id"]

    0 讨论(0)
  • 2021-01-05 06:46

    Try this selector:

    [id^="this_div_id_"]
    

    Pure JavaScript: (reference)

    document.querySelectorAll('[id^="this_div_id_"]')
    

    jQuery: (reference)

    $('[id^="this_div_id_"]')
    

    CSS: (reference)

    [id^="this_div_id_"] {
        /* do your stuff */
    }
    

    Why is this working?

    With the [] in the selector, you can select attributes. Use '=' to match exactly the value or use the '^=' to check if the value starts with. Read more about this here.

    0 讨论(0)
提交回复
热议问题