diff --git a/src/compiler/parse/state/tag.ts b/src/compiler/parse/state/tag.ts index 1a18bd3115..c44db90488 100644 --- a/src/compiler/parse/state/tag.ts +++ b/src/compiler/parse/state/tag.ts @@ -221,9 +221,9 @@ export default function tag(parser: Parser) { element.children = read_sequence( parser, () => - parser.template.slice(parser.index, parser.index + 11) === '' + /^<\/textarea(\s[^>]*)?>/i.test(parser.template.slice(parser.index)) ); - parser.read(/<\/textarea>/); + parser.read(/^<\/textarea(\s[^>]*)?>/i); element.end = parser.index; } else if (name === 'script' || name === 'style') { // special case diff --git a/test/parser/samples/textarea-end-tag/input.svelte b/test/parser/samples/textarea-end-tag/input.svelte new file mode 100644 index 0000000000..8be330cfd0 --- /dev/null +++ b/test/parser/samples/textarea-end-tag/input.svelte @@ -0,0 +1,12 @@ + + diff --git a/test/parser/samples/textarea-end-tag/output.json b/test/parser/samples/textarea-end-tag/output.json new file mode 100644 index 0000000000..d723169934 --- /dev/null +++ b/test/parser/samples/textarea-end-tag/output.json @@ -0,0 +1,53 @@ +{ + "html": { + "start": 0, + "end": 117, + "type": "Fragment", + "children": [ + { + "start": 0, + "end": 117, + "type": "Element", + "name": "textarea", + "attributes": [], + "children": [ + { + "start": 10, + "end": 51, + "type": "Text", + "raw": "\n\t

not actu not actu \n asdf", + "data": "

\n asdf" + } + ] + } + ] + } +} \ No newline at end of file