1

我正在尝试使用从 DOM 中提取的信息制作导航栏,但我不断收到与 ES6 模板字符串相关的错误(在本例中为嵌套),显示为“未捕获的语法错误:模板表达式中缺少 }”

我对 ES6 语法很陌生。有什么建议么?

在此处输入图像描述

function makeNavList() {
var myList = ``;

$("#superfish-1>li").each(function (index, value) {

    myList += `<li>
    <a href="#!">${$(value).find(">a").text()}</a>

    <ul class="nav-dropdown">
    <li><a href="${$(value).find("a").attr("href")}">${$(value).find(">a").text()} - All</a></li>
    ${
        let collapselist= () =>{ 
            let innerlist = "";
            $("#superfish-1>li.ul>li").each(function(index, value){
                let linkPath = $(value).find("a").attr("href");
                let linkText = $(value).find("a").text();
                innerlist += `<li>
                <a href="${linkPath}">${linkText}</a>
                </li>`
            })
            return innerlist;
        }

    }</ul>
    </li>`

})
return myList
}
4

3 回答 3

1

模板文字中标记占位符的内容必须是一个表达式,但您正在尝试使用语句( let collapselist = ...)。你不能那样做。

相反,首先创建列表然后将其嵌入到字符串中可能是最干净的:

let collapselist= () =>{ 
    let innerlist = "";
    $("#superfish-1>li.ul>li").each(function(index, value){
        let linkPath = $(value).find("a").attr("href");
        let linkText = $(value).find("a").text();
        innerlist += `<li>
        <a href="${linkPath}">${linkText}</a>
        </li>`
    })
    return innerlist;
};

然后

${collapelist}

...在模板文字中。

于 2018-04-23T18:06:09.540 回答
0

将您的函数移到模板之外。你不能在里面声明语句${}

function makeNavList() {
var myList = ``;

$("#superfish-1>li").each(function (index, value) {

    myList += `<li>
    <a href="#!">${$(value).find(">a").text()}</a>

    <ul class="nav-dropdown">
    <li><a href="${$(value).find("a").attr("href")}">${$(value).find(">a").text()} - All</a></li>
    ${getCollapselist()}</ul>
    </li>`

})
return myList
}

getCollapselist = function(){
  let innerlist = "";
  $("#superfish-1>li.ul>li").each(function(index, value){
      let linkPath = $(value).find("a").attr("href");
      let linkText = $(value).find("a").text();
      innerlist += `<li>
      <a href="${linkPath}">${linkText}</a>
      </li>`
  })
  return innerlist;
}
于 2018-04-23T18:05:45.057 回答
-1

如果您有 ES6 功能,您需要使用 ES6 功能的新良好实践来标准化您的代码,例如使用箭头函数等,您的错误是您在 {} 中声明了您的函数。

const makeNavList = () => {
    let myList = '';

    const collapseList = () =>{ 
        let innerList = '';
        $("#superfish-1>li.ul>li").each(value => {
            const linkPath = $(value).find("a").attr("href");
            const linkText = $(value).find("a").text();
            innerList += `<li><a href="${linkPath}">${linkText}</a></li>`
        });

        return innerList;
    }

    $("#superfish-1>li").each(value => {

        myList += `<li>
        <a href="#!">${$(value).find(">a").text()}</a>

        <ul class="nav-dropdown">
            <li><a href="${$(value).find("a").attr("href")}">${$(value).find(">a").text()} - All</a></li>
            ${`${collapseList()}`} 
        </ul>
        </li>`

    })

    return myList
}
于 2018-04-23T18:16:59.997 回答