如何使用html javascript和css创建模板页面

问题描述 投票:1回答:2

所以我使用PHP为我的网站,并使用include / require将我的页眉和页脚添加到每个页面但我试图使用phonegap构建一个应用程序只允许html css和javascript如何构建模板页眉和页脚而不使用PHP

所以我有5页需要相同的页眉和页脚但内容不同

如果我不能使用PHP,我该怎么做?或者我可以吗?对所有建议开放

<body>

<header>
This is my header
</header>

<content>
page content
</content>

<footer>
this is my footer
</footer>


</body>
javascript html css phonegap
2个回答
0
投票

您仍然可以调用在特殊元素上生成html代码的脚本,

想象一下,你的应用程序的每个页面都有一个id #header,它会调用你的脚本插入一些如下所示的问候语:

document.getElementById("#header").insertAdjacentHTML("afterbegin", "<h1>Hello there!</h1>");
<div id="#header"></div>

https://developer.mozilla.org/fr/docs/Web/API/Element/insertAdjacentHTML

我过去做过类似的事情:

const Component = function(props) {
  this.props = props;

  let _state = {};
  this.setState = state => (_state = state);
  this.getState = () => _state;
};

class Factory extends Component {
  constructor(props) {
    super(props);

    this.setState({
      template: this.setTemplate(this.props.template), //html
      action: this.props.template[this.props.action], // js
      templateState: this.props.action, // switch beetween html/js
      dom: {
        //dom elements
        header: document.querySelector("#header-pwd"),
        content: document.querySelector("#content-pwd"),
        info: document.querySelector("#info-pwd")
      }
    });

    this.clear(); // clear html
    this.getTemplate(); // insert template into dom
    this.getState().action(); // link onclick elements
  }

  getTemplate() {
    const template = this.getState().template;

    const header = this.getState().dom.header;
    const content = this.getState().dom.content;
    const info = this.getState().dom.info;

    header.insertAdjacentHTML("afterbegin", template.header);
    content.insertAdjacentHTML("afterbegin", template.content);
    info.insertAdjacentHTML("afterbegin", template.info);
  }

  setTemplate(template) {
    const getState = this.getState().templateState
      ? this.getState().templateState
      : this.props.action;
    const objectFilter = Object.keys(template)
      .filter(key => key[0] !== "_")
      .map(
        key =>
          template[key][getState]
            ? template[key][getState]
            : template[key]["_init"]
      );
    return {
      header: objectFilter[0],
      content: objectFilter[1],
      info: objectFilter[2]
    };
  }

  clear() {
    const dom = Object.values(this.getState().dom);
    for (let parent of dom) {
      if (parent.firstChild === null) continue;
      while (parent.firstChild) {
        parent.removeChild(parent.firstChild);
      }
    }
  }
}

使用这样的对象:

const pageTemplate = {
  header: {
    _init: `<h1>my header</h1>`
  },
  content: {
    _init: `<h1>my content</h1>`
  },
  info: {
    _init: `<h1>my footer</h1>`
  },
  _init: () => {
    /* your js logic like onclick action with your knew dom created */
  }
};
new Factory({ template: pageTemplate, action: "_init" });

你的HTML:

<div id="header-pwd"></div>
<div id="content-pwd"></div>
<div id="info-pwd"></div>

0
投票

通过使用普通的javascript动态生成模板,可以没有任何库或不使用外部html文件。在这种情况下,这意味着您必须编写自己的页眉/页脚迷你模块,该模块在调用时动态呈现。

就像是

function myHeaderTemplate(){
   let htemplate = {};

   //template properties
   htemplate.props = {title: '', otherProps: ''}

   //template methods
   htemplate.render = function(){
      //generate the html template
      //possibly add custom content
      //use your props here
   }

   //other methods

   return htemplate;
}

然后我们在您的页面中实例化此模板对象,例如about.html

let header = new myHeaderTemplate();
header.props.title = 'About Header';
//other props and customizable content
header.render();

可悲的是,这并没有真正给你一个答案。只是一个想法/可能的方法。你必须使用OOP。

© www.soinside.com 2019 - 2024. All rights reserved.