160

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
  • 178,213
  • 47
  • 333
  • 501
user48408
  • 3,234
  • 11
  • 39
  • 59
  • 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

238
$('*[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
  • 339,989
  • 67
  • 413
  • 406
  • 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
172

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
  • 7,118
  • 2
  • 30
  • 34
24

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

$("div:visible[id*='foo']");
port-zero
  • 657
  • 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,234
  • 11
  • 39
  • 59