* @type String
* @cat DOM
*/
+
+ /**
+ * Set the text contents of all matched elements. This has the same
+ * effect as calling .html() with your specified string.
+ *
+ * @example $("p").text("Some new text.");
+ * @before <p>Test Paragraph.</p>
+ * @result <p>Some new text.</p>
+ *
+ * @param String val The text value to set the contents of the element to.
+ *
+ * @name text
+ * @type String
+ * @cat DOM
+ */
text: function(e) {
+ // A surprisingly high number of people expect the
+ // .text() method to do this, so lets do it!
+ if ( typeof e == "string" )
+ return this.html( e );
+
e = e || this;
var t = "";
for ( var j = 0; j < e.length; j++ ) {
"^=": "z && !z.indexOf(m[4])",
"$=": "z && z.substr(z.length - m[4].length,m[4].length)==m[4]",
"*=": "z && z.indexOf(m[4])>=0",
- "": "z"
+ "": "z",
+ _resort: function(m){
+ return ["", m[1], m[3], m[2], m[5]];
+ },
+ _prefix: "z=jQuery.attr(a,m[3]);"
},
"[": "jQuery.find(m[2],a).length"
},
- /**
+ /**
* All elements on a specified axis.
*
* @private
* @name $.sibling
* @type Array
* @param Element elem The element to find all the siblings of (including itself).
- * @cat DOM/Traversing
- */
+ * @cat DOM/Traversing
+ */
sibling: function( n, elem ) {
var r = [];
value: "value",
disabled: "disabled",
checked: "checked",
- readonly: "readOnly"
+ readonly: "readOnly",
+ selected: "selected"
};
// IE actually uses filters for opacity ... elem is actually elem.style
"\\[ *(@)S *([!*$^=]*) *('?\"?)(.*?)\\4 *\\]",
// Match: [div], [div p]
- "(\\[)\s*(.*?)\s*\\]",
+ "(\\[)\\s*(.*?)\\s*\\]",
// Match: :contains('foo')
"(:)S\\(\"?'?([^\\)]*?)\"?'?\\)",
if ( m ) {
// Re-organize the first match
- if ( !i )
- m = ["",m[1], m[3], m[2], m[5]];
+ if ( jQuery.expr[ m[1] ]._resort )
+ m = jQuery.expr[ m[1] ]._resort( m );
// Remove what we just matched
t = t.replace( re, "" );
// Build a custom macro to enclose it
eval("f = function(a,i){" +
- ( m[1] == "@" ? "z=jQuery.attr(a,m[3]);" : "" ) +
+ ( jQuery.expr[ m[1] ]._prefix || "" ) +
"return " + f + "}");
// Execute it against the current filter
// Bind an event to an element
// Original by Dean Edwards
- add: function(element, type, handler) {
+ add: function(element, type, handler, data) {
// For whatever reason, IE has trouble passing the window object
// around, causing it to be cloned in the process
if ( jQuery.browser.msie && element.setInterval != undefined )
element = window;
+ // if data is passed, bind to handler
+ if( data )
+ handler.data = data;
+
// Make sure that the function being executed has a unique ID
if ( !handler.guid )
handler.guid = this.guid++;
// Detach an event or set of events from an element
remove: function(element, type, handler) {
if (element.events)
- if (type && element.events[type])
+ if ( type && type.type )
+ delete element.events[ type.type ][ type.handler.guid ];
+ else if (type && element.events[type])
if ( handler )
delete element.events[type][handler.guid];
else
args.unshift( event );
for ( var j in c ) {
+ // Pass in a reference to the handler function itself
+ // So that we can later remove it
+ args[0].handler = c[j];
+ args[0].data = c[j].data;
+
if ( c[j].apply( this, args ) === false ) {
event.preventDefault();
event.stopPropagation();
}
// Clean up added properties in IE to prevent memory leak
- if (jQuery.browser.msie) event.target = event.preventDefault = event.stopPropagation = null;
+ if (jQuery.browser.msie) event.target = event.preventDefault = event.stopPropagation = event.handler = event.data = null;
return returnValue;
},
/**
* Get the html contents of the first matched element.
+ * This property is not available on XML documents.
*
* @example $("div").html();
* @before <div><input/></div>
/**
* Set the html contents of every matched element.
+ * This property is not available on XML documents.
*
* @example $("div").html("<b>new stuff</b>");
* @before <div><input/></div>
* Get a set of elements containing the unique ancestors of the matched
* set of elements (except for the root element).
*
- * @example $("span").ancestors()
- * @before <html><body><div><p><span>Hello</span></p><span>Hello Again</span></div></body></html>
- * @result [ <body>...</body>, <div>...</div>, <p><span>Hello</span></p> ]
- *
- * @name ancestors
- * @type jQuery
- * @cat DOM/Traversing
- */
-
- /**
- * Get a set of elements containing the unique ancestors of the matched
- * set of elements, and filtered by an expression.
- *
- * @example $("span").ancestors("p")
- * @before <html><body><div><p><span>Hello</span></p><span>Hello Again</span></div></body></html>
- * @result [ <p><span>Hello</span></p> ]
- *
- * @name ancestors
- * @type jQuery
- * @param String expr An expression to filter the ancestors with
- * @cat DOM/Traversing
- */
- ancestors: jQuery.parents,
-
- /**
- * Get a set of elements containing the unique ancestors of the matched
- * set of elements (except for the root element).
- *
- * @example $("span").ancestors()
+ * @example $("span").parents()
* @before <html><body><div><p><span>Hello</span></p><span>Hello Again</span></div></body></html>
* @result [ <body>...</body>, <div>...</div>, <p><span>Hello</span></p> ]
*
* Get a set of elements containing the unique ancestors of the matched
* set of elements, and filtered by an expression.
*
- * @example $("span").ancestors("p")
+ * @example $("span").parents("p")
* @before <html><body><div><p><span>Hello</span></p><span>Hello Again</span></div></body></html>
* @result [ <p><span>Hello</span></p> ]
*
* default behaviour. To stop both default action and event bubbling, your handler
* has to return false.
*
+ * In most cases, you can define your event handlers as anonymous functions
+ * (see first example). In cases where that is not possible, you can pass additional
+ * data as the second paramter (and the handler function as the third), see
+ * second example.
+ *
* @example $("p").bind( "click", function() {
* alert( $(this).text() );
* } )
* @before <p>Hello</p>
* @result alert("Hello")
*
+ * @example var handler = function(event) {
+ * alert(event.data.foo);
+ * };
+ * $("p").bind( "click", {foo: "bar"}, handler)
+ * @result alert("bar")
+ * @desc Pass some additional data to the event handler.
+ *
* @example $("form").bind( "submit", function() { return false; } )
* @desc Cancel a default action and prevent it from bubbling by returning false
* from your function.
* @name bind
* @type jQuery
* @param String type An event type
+ * @param Object data (optional) Additional data passed to the event handler as event.data
* @param Function fn A function to bind to the event on each of the set of matched elements
* @cat Events
*/
- bind: function( type, fn ) {
- jQuery.event.add( this, type, fn );
+ bind: function( type, data, fn ) {
+ jQuery.event.add( this, type, fn || data, data );
},
/**