code: function jq_fn_sub( mode, force_attr, params, merge_mode ) {
      if ( !is_string( params ) && typeof params !== 'object' ) {
        // force_attr not specified.
        merge_mode = params;
        params = force_attr;
        force_attr = undefined;
      }
      
      return this.each(function(){
        var that = $(this),
          
          // Get attribute specified, or default specified via $.elemUrlAttr.
          attr = force_attr || jq_elemUrlAttr()[ ( this.nodeName || '' ).toLowerCase() ] || '',
          
          // Get URL value.
          url = attr && that.attr( attr ) || '';
        
        // Update attribute with new URL.
        that.attr( attr, jq_param[ mode ]( url, params, merge_mode ) );
      });
      
    }
docs: Method: jQuery.fn.fragment  Update URL attribute in one or more elements, merging the current URL (with or without pre-existing fragment/hash params) plus any params object or string into a new URL, which is then set into that attribute. Like <jQuery.param.fragment (build url)>, but for all elements in a jQuery collection.  Usage:  > jQuery('selector').fragment( [ attr, ] params [, merge_mode ] );  Arguments:  attr - (String) Optional name of an attribute that will contain a URL to merge params into. See <jQuery.elemUrlAttr> for a list of default attributes. params - (Object) A params object to be merged into the URL attribute. params - (String) A URL containing fragment (hash) params, or params string to be merged into the URL attribute. merge_mode - (Number) Merge behavior defaults to 0 if merge_mode is not specified, and is as-follows:  * 0: params in the params argument will override any params in attr URL. * 1: any params in attr URL will override params in the params argument. * 2: params argument will completely replace any fragment (hash) in attr URL.  Returns:  (jQuery) The initial jQuery collection of elements, but with modified URL attribute values.