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)
但是问题是它不是用完整的描述替换子字符串当前的帖子描述,而是用列表中的最后一个完整的描述替换子字符串!
答案 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')}'
。