首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有办法简化这个片段吗?

有办法简化这个片段吗?
EN

Stack Overflow用户
提问于 2022-07-16 00:41:00
回答 1查看 30关注 0票数 0
代码语言:javascript
运行
复制
const navTitle = document.querySelectorAll(".nav-sec");
const subTitle = document.querySelector(".subtitle");
const artTexts = document.querySelectorAll(".art-text");
const sectionTitles = document.querySelectorAll(".section_title");
const footerContent = document.querySelector(".footer_content");
const projectsTitle = document.querySelectorAll(".title-project");
const projectsDescription = document.querySelectorAll(".desc-project");
const aboutTitle = document.querySelectorAll(".about_title");
const contactContent = document.querySelector(".contact_content");
const aboutContent = document.querySelectorAll(".about_content");

btnLang.addEventListener("click", () => {
  const attr = (btnEnglish.classList.contains("hiddden") ? btnPortuguese : btnEnglish).getAttribute("language");

  navTitle.forEach((el, index) => (el.textContent = data[attr].navbar[index]));
  sectionTitles.forEach((title, index) => (title.textContent = data[attr].navbar[index]));
  projectsTitle.forEach((project_titles, index) => (project_titles.textContent = data[attr].project_titles[index]));
  projectsDescription.forEach((project_description, index) => (project_description.textContent = data[attr].project_description[index]));
  aboutTitle.forEach((about_title, index) => (about_title.textContent = data[attr].about_title[index]));
  aboutContent.forEach((about_content, index) => (about_content.textContent = data[attr].about_content[index]));

  contactContent.textContent = data[attr].contact_content;
  subTitle.textContent = data[attr].subtitle;
  footerContent.textContent = data[attr].footer_content;
});

我是本宁格人,我知道当你重复太多时,你可能会简化一些事情。但是我怎样才能接近这样的代码呢?干货。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-16 00:53:39

假设data中的数组元素数量与DOM中的匹配元素相同,一种方法是使用一个选择器数组,每个选择器都绑定到数据上的相关属性名称。迭代选择器和语言属性,然后循环遍历匹配选择器的每个元素,从language属性分配相同的索引。

代码语言:javascript
运行
复制
const selectorsByLangProp = [
    ['navbar', '.nav-sec'],
    ['navbar', '.section_title'],
    ['project_titles', '.title-project'],
    ['project_description', '.desc-project'],
    ['about_title', '.about_title'],
    ['about_content', '.about_content'],
];
btnLang.addEventListener("click", () => {
  const attr = (btnEnglish.classList.contains("hiddden") ? btnPortuguese : btnEnglish).getAttribute("language");
  const langData = data[attr];
  for (const [langProp, selector] of selectorsByLangProp) {
    document.querySelectorAll(selector).forEach((elm, i) => {
        elm.textContent = langData[langProp][i];
    });
  }

  contactContent.textContent = langData.contact_content;
  subTitle.textContent = langData.subtitle;
  footerContent.textContent = langData.footer_content;
});

对于更大、更复杂的页面,更好的方法是直接从数据构建HTML,而不是有单独的选择器和属性。例如,使用React,您可能能够做类似于以下内容的事情:

代码语言:javascript
运行
复制
const Page = ({ langData }) => (<>
  <div>{langData.subTitle}</div>
  {
    langData.sections.map((sectionData) => (
      <section>
        <div>{sectionData.project_title}</div>
        <div>{sectionData.project_description}</div>
      </section>
    ))
  }
  <footer>{langData.contact_content} {langData.footer_content}</footer>
</>);

(这不是有效的代码,但它是实现这类事情的一个例子)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73000769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档