为什么我会收到Uncaught SyntaxError:意外令牌:标识符

时间:2020-09-09 06:35:09

标签: javascript json django ajax

for (post of posts) { //Posts are returned from a python django function                                        
  let readMore = '';
  let postDesc = post.fields.description
  if (post.fields.description.length > 227) {
    readMore = `<p class="btn btn-link" onclick="this.innerHTML = ${postDesc}"> Read more</p>`;
  };
  output += `<p class="card-text" style="white-space: pre-line;">${post.fields.description.substring(0, 227)} ${readMore}</p>`;

}

但是当我单击“阅读更多”按钮时:

Uncaught SyntaxError: unexpected token: identifierlocalhost:8000:1:22

我试图删除onclick并将其替换为结尾:

$('#mainPosts').append(output)

function showMore() {
  $('.readMore').click(function(e) {
    e.preventDefault();
    $(this).parent().html(`<br> ${post.fields.description}`)
  })
}
let g = document.createElement('script');
let s = document.getElementsByTagName('script')[0]
g.text = showMore();
s.parentNode.insertBefore(g, s)

但是问题是它不是用完整的描述替换子字符串当前的帖子描述,而是用列表中的最后一个完整的描述替换子字符串!

1 个答案:

答案 0 :(得分:0)

onclick="this.innerHTML = ${postDesc}更改为onclick="this.innerHTML = '${postDesc}'

让我们研究一下如何扩展当前模板字符串,如果postDesc == "hello world"

<p class="btn btn-link" onclick="this.innerHTML = hello world"> Read more</p>`;。当JavaScript VM尝试执行this.innerHTML = hello world时,它会将hello识别为一个未定义的标识符,将容忍该标识符,但是随后遇到world,这是另一个未定义的标识符,这在此时是意外,因此出现错误unexpected token: identifier

正如Andreas指出的那样,postDesc中的单引号会引起问题。这是一种解决方法:onclick="this.innerHTML = '${postDesc.replace(/([\"\'])/g,'\$1')}'