views:

45

answers:

2

how to make a simple strpos() with jquery

e.g. to locate if page has anystring inside a element td class="SeparateColumn"

         if $("anystring") then do it
+3  A: 

I assume you mean check whether a string contains a character, and the position in the string - you'd like to use the indexOf() method of a string in JS. Here are the relevant docs.


Okay, so you'd like to search the whole page! The :contains() selector will do that. See the jQuery docs for :contains.

To search every element in the page, use

var has_string = $('*:contains("search text")');

If you get jQuery elements back, then the search was a success. For example, on this very page

var has_string=$('*:contains("Alex JL")').length
//has_string is 18
var has_string=$('*:contains("horsey rodeo")').length
//has_string if 0. So, you could an `if` on this and it would work as expected.
Alex JL
Of course, the act of including 'horsey rodeo' in the example makes the last part technically false, but we won't get into that conundrum.
Alex JL
sounds good; how can I check if element <td class="SeparateColumn"> has a specific string on this page
Tom
@Tom `if($('td.SeparateColumn:contains("the string")')){/* do something*/}` should do it.
Alex JL
thanks but this fails: if(jQuery("tr.SeparateRow:contains('mycode')"))
Tom
@Tom fails in which way? An error, or it doesn't find the string? Oh - you have `tr.SeparateRow`, I think you mean `td.SeparateRow`.
Alex JL
A: 

You don't need jquery for this -- plain old Javascript will do just fine, using the .indexof() method.

However if you really want an exact syntax match for PHP's strpos(), something like this would do it:

function strpos (haystack, needle, offset) {
  var i = (haystack+'').indexOf(needle, (offset || 0));
  return i === -1 ? false : i;
}

Note: This function taken from here: http://phpjs.org/functions/strpos:545

Spudley
you be the first in one second :)
Haim Evgi
IE8 and below do not support `indexOf`.
YouBook
@YouBook that's Array.indexOf(), not String.indexOf(), that is not supported by older versions of IE.
Alex JL