How can I override the fivestar title attribute without hacking the module?
The reason your javascript didn't work is simple. If you disable Javascript and load the page with the fivestar widget, it's just a simple &lt;select&gt; list. It's turned into a clickable star widget using Javascript as well. So your js was most probably being overridden by fivestar.

You can do this without hacking the module and without using javascript by creating another custom module, but there's a small issue explained at the end. Lets call the module myfivestar for example.

You would then need to implement hook_element_info_alter() to change the fivestar element's process callback to your own custom one:

function myfivestar_element_info_alter(&amp;$type) {
  // Change the process callback of fivestar to myfivestar_expand
  if (isset($type ['fivestar']['#process'])) {
    $type ['fivestar']['#process'] = array('myfivestar_expand');
  }
}


Now you just need to copy the function fivestar_expand from the fivestar.module to your own module, rename it to myfivestar_expand, and change the line:

$options[$this_value] = t('Give @title @star/@count', array('@title' =&gt; $title, '@star' =&gt; $i, '@count' =&gt; $element['#stars']));


to:

$options[$this_value] = ''


which will effectively make the &lt;select&gt; list useless for visitors browsing with Javascript off as it removes the option labels which are then turned into the title attribute using fivestar's javascript.