Bladeren bron

Merge pull request #787 from nkovacs/786-content-select-children

<content> select should only match children.
Evan You 11 jaren geleden
bovenliggende
commit
9099bd66ee
2 gewijzigde bestanden met toevoegingen van 18 en 5 verwijderingen
  1. 8 5
      src/compiler/transclude.js
  2. 10 0
      test/unit/specs/compiler/transclude_spec.js

+ 8 - 5
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
       }

+ 10 - 0
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 = '<p class="b">select b</p><span><p class="b">nested b</p></span><span><p class="c">nested c</p></span>'
+      options.template = '<content select=".a"><p>fallback a</p></content><content select=".b">fallback b</content><content select=".c">fallback c</content>'
+      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')
+    })
+
   })
 }