diff --git a/src/compiler/transclude.js b/src/compiler/transclude.js index 6fd79edc3f0..1fa6260fc57 100644 --- a/src/compiler/transclude.js +++ b/src/compiler/transclude.js @@ -87,11 +87,14 @@ function transcludeContent (el, raw) { select = outlet.getAttribute('select') if (select) { // select content selected = raw.querySelectorAll(select) - outlet.content = _.toArray( - selected.length - ? selected - : outlet.childNodes - ) + if (selected.length) { + selected = _.toArray(selected).filter(function(node) { + return node.parentNode === raw + }) + } + outlet.content = selected.length + ? selected + : _.toArray(outlet.childNodes) } else { // default content main = outlet } diff --git a/test/unit/specs/compiler/transclude_spec.js b/test/unit/specs/compiler/transclude_spec.js index 67b004f686d..eee57d1d961 100644 --- a/test/unit/specs/compiler/transclude_spec.js +++ b/test/unit/specs/compiler/transclude_spec.js @@ -109,5 +109,15 @@ if (_.inBrowser) { expect(res.childNodes[3].tagName).toBe('SPAN') }) + it('select should only match children', function () { + el.innerHTML = '

select b

nested b

nested c

' + options.template = '

fallback a

fallback bfallback c' + var res = transclude(el, options) + expect(res.childNodes.length).toBe(3) + expect(res.firstChild.textContent).toBe('fallback a') + expect(res.childNodes[1].textContent).toBe('select b') + expect(res.lastChild.textContent).toBe('fallback c') + }) + }) } \ No newline at end of file