【问题标题】:putting jekyll tags in an "onclick" breaks将 jekyll 标签放入“onclick”中断
【发布时间】:2016-10-27 15:22:13
【问题描述】:

在 jekyll 中,这是可行的:

---
layout: default
---
    <div class="brief">
        <ul>
            {% for post in site.posts %}
                <li class="postlist">
                    <a href="#" onclick='document.getElementById("one").innerHTML="{{post.url}}";'>{{post.title}}</a>
                    <p>{{post.meta}} <br>{{post.date}} <br>{{post.category}}</p>                
                </li>
            {% endfor %}
        </ul>
    </div>
    <div class="post" id="one"></div>

但是当我将第 8 行更改为:

<a href="#" onclick='document.getElementById("one").innerHTML="{{post.content}}";'>{{post.title}}</a>

它坏了。为什么会发生这种情况,我该怎么做才能改变这种情况并获得预期的结果?

【问题讨论】:

  • 您能否更具体地说明中断的具体内容?

标签: javascript html ruby jekyll


【解决方案1】:

您的帖子内容可能会创建无效的 HTML(例如,结束 onclick 引号)。

在我看来,实现此目的的更好方法是隐藏所有帖子内容,并让您的onclick 切换一个类以显示相关内容。这将使您免于通过属性值对内容进行编码和解码的无尽恐惧。

例如:

{% for post in site.posts %}
  <li>
    <a href="#" onclick='document.getElementById("post-content-{{ forloop.index }}").classList.toggle("hidden")'>{{ post.title }}</a>

    <p>{{ post.meta }} <br>{{ post.date }} <br>{{ post.category }}</p>
    <p id="post-content-{{ forloop.index }}" class="hidden">{{ post.content }}</p>
  </li>
{% endfor %}

外部 CSS:

.hidden {
  display: none;
}

您也可以扩展它以首先隐藏所有内容部分,因此一次只显示一个。

【讨论】:

  • 谢谢!这可行,但有一个小故障,“隐藏”在一秒钟后切换回来,div 再次变得不可见。有什么想法吗?
  • 您可以尝试remove 方法而不是toggle。如果在那之后它仍然切换回来,那么您网站上的其他东西可能会干扰它。
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 2013-05-23
  • 2019-07-19
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多