52

I seem to be having trouble with my code. I need to say:

if ( $('html').attr('lang').val() == 'fr-FR' ) {
    // do this
} else {
    // do that
}

When I check the console, I just get an error telling me this isn't a function. Help would be appreciated.

Thanks,

Matt
  • 74,352
  • 26
  • 153
  • 180
beefchimi
  • 1,308
  • 2
  • 17
  • 34

2 Answers2

112

Just remove the .val(). Like:

if ( $('html').attr('lang') == 'fr-FR' ) {
    // do this
} else {
    // do that
}
Miguel Ribeiro
  • 8,057
  • 20
  • 51
  • 74
  • 7
    You answered to quickly dude, I have to wait 5 more minutes in order to accept it :) – beefchimi Jun 26 '12 at 16:03
  • You often want to check the `class` attribute for a value, but `class` attr can have multiple values separated by space, like this `
    ` so in that case you can use the function `hasClass()` to check for a value like so `$( "#mydiv" ).hasClass( "two" )`
    – Sumeet Pareek Aug 06 '21 at 12:54
14

jQuery's attr method returns the value of the attribute:

The .attr() method gets the attribute value for only the first element in the matched set. To get the value for each element individually, use a looping construct such as jQuery's .each() or .map() method.

All you need is:

$('html').attr('lang') == 'fr-FR'

However, you might want to do a case-insensitive match:

$('html').attr('lang').toLowerCase() === 'fr-fr'

jQuery's val method returns the value of a form element.

The .val() method is primarily used to get the values of form elements such as input, select and textarea. In the case of <select multiple="multiple"> elements, the .val() method returns an array containing each selected option; if no option is selected, it returns null.

zzzzBov
  • 174,988
  • 54
  • 320
  • 367