154

I'm trying to find all elements on a page whose element ID contains a certain text. I'll then need to filter the found elements based on whether they are hidden or not. Any help is greatly appreciated.

Robert Harvey
  • 173,679
  • 45
  • 326
  • 490
user48408
  • 3,124
  • 11
  • 35
  • 57
  • possible duplicate of [JQuery selector regular expressions](http://stackoverflow.com/questions/190253/jquery-selector-regular-expressions) – Robert MacLean Aug 31 '11 at 09:39

4 Answers4

232
$('*[id*=mytext]:visible').each(function() {
    $(this).doStuff();
});

Note the asterisk '*' at the beginning of the selector matches all elements.

See the Attribute Contains Selectors, as well as the :visible and :hidden selectors.

karim79
  • 334,458
  • 66
  • 409
  • 405
  • 20
    Maybe worth mentioning that when matching against an element's `id` you do not use quotes, where when matching against a `name` you do. `$('*[name*="myname"]:visible')` Not the most intuitive and has caught me up before. – ficuscr Oct 03 '13 at 01:55
  • I replaced $(this).doStuff(); with this.doStuff(); and worked – Carlos López Marí Jan 11 '20 at 18:07
162

If you're finding by Contains then it'll be like this

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

If you're finding by Starts With then it'll be like this

    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

If you're finding by Ends With then it'll be like this

     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

If you want to select elements which id is not a given string

    $("input[id!='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

If you want to select elements which name contains a given word, delimited by spaces

     $("input[name~='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

If you want to select elements which id is equal to a given string or starting with that string followed by a hyphen

     $("input[id|='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });
dnxit
  • 6,712
  • 2
  • 27
  • 33
23

This selects all DIVs with an ID containing 'foo' and that are visible

$("div:visible[id*='foo']");
port-zero
  • 647
  • 3
  • 7
7

Thanks to both of you. This worked perfectly for me.

$("input[type='text'][id*=" + strID + "]:visible").each(function() {
    this.value=strVal;
});
user48408
  • 3,124
  • 11
  • 35
  • 57