javascript - 从渲染元素加载 JavaScript 状态

标签 javascript jquery reactjs

只是想知道是否有任何 JavaScript 框架或库可以从现有 DOM 元素加载部分初始状态。

reactjs 或 vuejs 可以做这样的事情吗?

所以为了完全清楚,我想在服务器上渲染页面并将一些元素标记为模型的一部分。这个想法是能够用一些重要的数据渲染 html,这样搜索引擎就可以在没有 js 的情况下获取它。常规使用会有完全相同的页面,但是一旦 js 启动,我希望它从标记的字段中获取数据并添加到当前状态。

<h1 x-marker="pageTitle">Page Title</h1>
<h2>{{ subtitle }}</h2>


var state = {
    subtitle: 'This is subtitle',
}

搜索引擎看到这个:

<h1>Page Title</h1>
<h2>{{subtitle}}</h2>

普通用户看到这个:

<h1>Page Title</h1>
<h2>This is subtitle</h2>

但是状态应该是

var state = {
    pageTitle: 'Page Title',
    subtitle: 'This is subtitle',
}

所以我希望它最初从 x 标记中提取数据,然后维护该元素的状态。

我可以自己实现这种事情,只是想检查这样的事情是否已经存在。

最佳答案

喜欢crazy nastyass honeybadger ,vue 不在乎。你可以做任何你喜欢做的事(读取 dom、替换),只要在实例化 vue 之前执行即可。

This fiddle显示您的场景运行良好。这个想法让我觉得有点下流,当然服务器端渲染是处理这个问题的首选方法。 Vue 还有 server-side rendering ,但你感到害怕也是情有可原的。如果这能让你摆脱困境,那就去做吧。正如他们所说,做好人,如果你不能做好人,请小心:-)

HTML

<div id="crazyNastyass">
  <h1 id="pageTitle">Page Title</h1>
  <h2>{{state.subtitle}}</h2>
</div>

JS

var state = {
    pageTitle:null,
    subtitle: 'This is subtitle'
}

var titleNode = document.getElementById('pageTitle');
state.pageTitle = titleNode.innerHTML;
titleNode.innerHTML = '{{state.pageTitle}}'

var vm = new Vue({
  el: '#crazyNastyass',
  data: {state:state}
})

关于javascript - 从渲染元素加载 JavaScript 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44928666/

相关文章:

javascript - 如何在提交表单后更改 CSS

php - Javascript 和 Php (MVC)

jquery - mouseenter/mouseleave 和淡出问题

javascript - 使用按钮显示和隐藏 iframe

javascript - JQuery - 添加超过 1 条评论不起作用

javascript - 在下拉选择和验证时显示文本框

jquery - CSS 不会随着 .addClass() 或 .css() 动态改变

javascript - 使用 React 和 Hooks 的 IntersectionObserver

reactjs - 如何通过点击 material-ui 芯片去除灰色?

javascript - 将函数 A 作为 prop 传递,并在子函数调用 A 时调用另一个函数