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