fix($compile): do not wrap empty root text nodes in spans

Closes #1059
This commit is contained in:
Pete Bacon Darwin 2013-01-09 22:23:50 +00:00 committed by Igor Minar
parent 7e746015ea
commit 49f9e4cef1
2 changed files with 14 additions and 1 deletions

View file

@ -318,7 +318,7 @@ function $CompileProvider($provide) {
// We can not compile top level text elements since text nodes can be merged and we will
// not be able to attach scope data to them, so we will wrap them in <span>
forEach($compileNodes, function(node, index){
if (node.nodeType == 3 /* text node */) {
if (node.nodeType == 3 /* text node */ && node.nodeValue.match(/\S+/) /* non-empty */ ) {
$compileNodes[index] = jqLite(node).wrap('<span></span>').parent()[0];
}
});

View file

@ -125,6 +125,19 @@ describe('$compile', function() {
expect(element.find('span').text()).toEqual('A<a>B</a>C');
}));
it('should not wrap root whitespace text nodes in spans', function() {
element = jqLite(
'<div> <div>A</div>\n '+ // The spaces and newlines here should not get wrapped
'<div>B</div>C\t\n '+ // The "C", tabs and spaces here will be wrapped
'</div>');
$compile(element.contents())($rootScope);
var spans = element.find('span');
expect(spans.length).toEqual(1);
expect(spans.text().indexOf('C')).toEqual(0);
});
describe('multiple directives per element', function() {
it('should allow multiple directives per element', inject(function($compile, $rootScope, log){
element = $compile(