@@ -153,7 +153,7 @@ function JQLite(element) {
153
153
}
154
154
if ( ! ( this instanceof JQLite ) ) {
155
155
if ( isString ( element ) && element . charAt ( 0 ) != '<' ) {
156
- throw Error ( ' selectors not implemented ') ;
156
+ throw ngError ( 46 , 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element ') ;
157
157
}
158
158
return new JQLite ( element ) ;
159
159
}
@@ -165,7 +165,8 @@ function JQLite(element) {
165
165
div . innerHTML = '<div> </div>' + element ; // IE insanity to make NoScope elements work!
166
166
div . removeChild ( div . firstChild ) ; // remove the superfluous div
167
167
JQLiteAddNodes ( this , div . childNodes ) ;
168
- this . remove ( ) ; // detach the elements from the temporary DOM div.
168
+ var fragment = jqLite ( document . createDocumentFragment ( ) ) ;
169
+ fragment . append ( this ) ; // detach the elements from the temporary DOM div.
169
170
} else {
170
171
JQLiteAddNodes ( this , element ) ;
171
172
}
@@ -203,11 +204,16 @@ function JQLiteUnbind(element, type, fn) {
203
204
}
204
205
}
205
206
206
- function JQLiteRemoveData ( element ) {
207
+ function JQLiteRemoveData ( element , name ) {
207
208
var expandoId = element [ jqName ] ,
208
209
expandoStore = jqCache [ expandoId ] ;
209
210
210
211
if ( expandoStore ) {
212
+ if ( name ) {
213
+ delete jqCache [ expandoId ] . data [ name ] ;
214
+ return ;
215
+ }
216
+
211
217
if ( expandoStore . handle ) {
212
218
expandoStore . events . $destroy && expandoStore . handle ( { } , '$destroy' ) ;
213
219
JQLiteUnbind ( element ) ;
@@ -456,24 +462,26 @@ forEach({
456
462
}
457
463
} ,
458
464
459
- text : extend ( ( msie < 9 )
460
- ? function ( element , value ) {
461
- if ( element . nodeType == 1 /** Element */ ) {
462
- if ( isUndefined ( value ) )
463
- return element . innerText ;
464
- element . innerText = value ;
465
- } else {
466
- if ( isUndefined ( value ) )
467
- return element . nodeValue ;
468
- element . nodeValue = value ;
469
- }
465
+ text : ( function ( ) {
466
+ var NODE_TYPE_TEXT_PROPERTY = [ ] ;
467
+ if ( msie < 9 ) {
468
+ NODE_TYPE_TEXT_PROPERTY [ 1 ] = 'innerText' ; /** Element **/
469
+ NODE_TYPE_TEXT_PROPERTY [ 3 ] = 'nodeValue' ; /** Text **/
470
+ } else {
471
+ NODE_TYPE_TEXT_PROPERTY [ 1 ] = /** Element **/
472
+ NODE_TYPE_TEXT_PROPERTY [ 3 ] = 'textContent' ; /** Text **/
473
+ }
474
+ getText . $dv = '' ;
475
+ return getText ;
476
+
477
+ function getText ( element , value ) {
478
+ var textProp = NODE_TYPE_TEXT_PROPERTY [ element . nodeType ]
479
+ if ( isUndefined ( value ) ) {
480
+ return textProp ? element [ textProp ] : '' ;
470
481
}
471
- : function ( element , value ) {
472
- if ( isUndefined ( value ) ) {
473
- return element . textContent ;
474
- }
475
- element . textContent = value ;
476
- } , { $dv :'' } ) ,
482
+ element [ textProp ] = value ;
483
+ }
484
+ } ) ( ) ,
477
485
478
486
val : function ( element , value ) {
479
487
if ( isUndefined ( value ) ) {
@@ -518,8 +526,14 @@ forEach({
518
526
return this ;
519
527
} else {
520
528
// we are a read, so read the first child.
521
- if ( this . length )
522
- return fn ( this [ 0 ] , arg1 , arg2 ) ;
529
+ var value = fn . $dv ;
530
+ // Only if we have $dv do we iterate over all, otherwise it is just the first element.
531
+ var jj = value == undefined ? Math . min ( this . length , 1 ) : this . length ;
532
+ for ( var j = 0 ; j < jj ; j ++ ) {
533
+ var nodeValue = fn ( this [ j ] , arg1 , arg2 ) ;
534
+ value = value ? value + nodeValue : nodeValue ;
535
+ }
536
+ return value ;
523
537
}
524
538
} else {
525
539
// we are a write, so apply to all children
@@ -529,7 +543,6 @@ forEach({
529
543
// return self for chaining
530
544
return this ;
531
545
}
532
- return fn . $dv ;
533
546
} ;
534
547
} ) ;
535
548
@@ -627,22 +640,22 @@ forEach({
627
640
}
628
641
}
629
642
return false ;
630
- } ;
643
+ } ;
631
644
632
645
events [ type ] = [ ] ;
633
-
634
- // Refer to jQuery's implementation of mouseenter & mouseleave
646
+
647
+ // Refer to jQuery's implementation of mouseenter & mouseleave
635
648
// Read about mouseenter and mouseleave:
636
649
// http://www.quirksmode.org/js/events_mouse.html#link8
637
- var eventmap = { mouseleave : "mouseout" , mouseenter : "mouseover" }
650
+ var eventmap = { mouseleave : "mouseout" , mouseenter : "mouseover" } ;
651
+
638
652
bindFn ( element , eventmap [ type ] , function ( event ) {
639
653
var ret , target = this , related = event . relatedTarget ;
640
654
// For mousenter/leave call the handler if related is outside the target.
641
655
// NB: No relatedTarget if the mouse left/entered the browser window
642
656
if ( ! related || ( related !== target && ! contains ( target , related ) ) ) {
643
657
handle ( event , type ) ;
644
- }
645
-
658
+ }
646
659
} ) ;
647
660
648
661
} else {
0 commit comments