Is there any way to dynamically add a CSS class selector to a view with submitted exposed filters? I need to add some different styling to a view based on whether the exposed filters have been applied or not. Eg add the class "filtered" once a person has submitted their info in the exposed filter?
You can do this with View's pre_render hook, eg, something along the lines of this:

function YOURMODULE_views_pre_render(&amp;$view) {

  if ($view-&gt;name=='NAME_OF_YOUR_VIEW') {
    drupal_set_message('&lt;pre&gt;' . $view-&gt;exposed_data . '&lt;/pre&gt;'); // to see what you have to work with
    if (!empty($view-&gt;exposed_data['type'])) { 
      $view-&gt;display_handler-&gt;set_option('css_class', 'view-has-been-filtered');
    }
  }

}


The above is based on a node type exposed filter, you will need to look at your View to see what filter names are involved, but the logic is that the exposed_data filter arrays will be empty until you have applied the filter.  For example, here, this looks like this when you first go to the View:

Array
(
    [type] =&gt; Array
        (
        )

    [submit] =&gt; Apply
    [form_build_id] =&gt; form-85a47ba22bc12a8b443e4cc35afe75f7
    [form_token] =&gt; 105c57eec73efe4cfedd9acabc55786a
    [form_id] =&gt; views_exposed_form
    [] =&gt; Apply
)


and this is what it looks like after selecting 'foo' as a type in the exposed filter:

Array
(
    [type] =&gt; Array
        (
            [foo] =&gt; foo
        )

    [submit] =&gt; Apply
    [form_build_id] =&gt; form-85a47ba22bc12a8b443e4cc35afe75f7
    [form_token] =&gt; 105c57eec73efe4cfedd9acabc55786a
    [form_id] =&gt; views_exposed_form
    [] =&gt; Apply
)


ADDITION:

If this works for you, and per your comment, I suppose the following would work for any/all Views, but I haven't battle tested it...

function YOURMODULE_views_pre_render(&amp;$view) {

  $filter_classes=array('view-has-been-filtered');

  if (!empty($view-&gt;exposed_data) &amp;&amp; is_array($view-&gt;exposed_data)) {

    foreach($view-&gt;exposed_data as $k =&gt; $key) {
      if (is_array($key) &amp;&amp; !empty($key)) {
        $filter_classes[]='view-has-been-filtered-by-' . str_replace('_', '-', $k);
      }
    }

    if (count($filter_classes) &gt; 1) {
      $view-&gt;display_handler-&gt;set_option('css_class', implode(' ', $filter_classes));
    }

  }

}


...with the logic here being the only arrays in $view-&gt;exposed_data are filters, and if they aren't empty, the View has been filtered.  

EEEK ADDITION:

My logic is somewhat flawed in that my initial tests were for filters that allowed multiple selections, and, of course, Views used arrays to capture them in $view-&gt;exposed_data.  If your filters are just single value fields, Views will do something like this first:

Array
(
    [multiple_value_allowed_type] =&gt; Array
        (
        )

    [field_single_value_field] =&gt; All
    [submit] =&gt; Apply
    [form_build_id] =&gt; form-f601bde36c625db96bad7a84bf4fa210
    [form_token] =&gt; 105c57eec73efe4cfedd9acabc55786a
    [form_id] =&gt; views_exposed_form
    [] =&gt; Apply
)


so I guess the following dull ax approach would work:

function YOURMODULE_views_pre_render(&amp;$view) {

  $filter_classes=array('view-has-been-filtered');

  if (!empty($view-&gt;exposed_data) &amp;&amp; is_array($view-&gt;exposed_data)) {

    foreach($view-&gt;exposed_data as $k =&gt; $key) {
      if (is_array($key)) {
        if (!empty($key)) {
          $filter_classes[]='view-has-been-filtered-by-' . str_replace('_', '-', $k);
        }
      } else {
        switch ($k) {
          case 'submit':
          case 'form_build_id':
          case 'form_token':
          case 'form_id':
            break;
          default:
            if (!empty($k) &amp;&amp; $key != 'All')  {
              $filter_classes[]='view-has-been-filtered-by-' . str_replace('_', '-', $k);
            }
        }
      }
    }

    if (count($filter_classes) &gt; 1) {
      $view-&gt;display_handler-&gt;set_option('css_class', implode(' ', $filter_classes));
    }

  }

}


DOUBLE D'OH ADDITION:

Of course, this quick and dirty logic also works:

function YOURMODULE_views_pre_render(&amp;$view) {

  if (!empty($view-&gt;exposed_data) &amp;&amp; count($_GET) &gt; 1) {
    $view-&gt;display_handler-&gt;set_option('css_class', 'view-has-been-filtered');
  }

}


ADDITION DUE TO COMMENTARY:

If you are setting css classes via the UI that you want to preserve, you can do this:

$view-&gt;display_handler-&gt;set_option('css_class', $view-&gt;display_handler-&gt;get_option('css_class') . ' view-has-been-filtered');


which gets that UI option and then adds the view-has-been-filtered class to it.  Please note the required space in front in the code :)