【问题标题】:replace content of div with another content用另一个内容替换 div 的内容
【发布时间】:2012-12-20 00:42:51
【问题描述】:

我一直在构建一个链接列表,所有这些都应该在单击时将 div 的内容更改为另一个特定内容(大约 4 行内容:姓名、网站、联系人等)。

我找到了这段代码:

<script type="text/javascript">
    function ReplaceContentInContainer(id,content) {
        var container = document.getElementById(id);
        container.innerHTML = content;
    }
</script>

并以这种方式使用它:

<li class="pl11">
    <a href="javascript:ReplaceContentInContainer('wojewodztwo', '<a href="http://address.com">superlink</a>')">Pomorskie</a>
</li>

它并没有像我预期的那样工作。

它将超链接文本从“Pomorskie”更改为“超级链接”。

纯文本可以正常工作,但我需要链接。

这是http://xn--pytyfundamentowe-jyc.pl/projektanci/kontakty-p/(其中只有两个显示任何内容)

但是在尝试了你所有的建议之后,我想我会用#links 跳转到不同的 div,因为没有任何效果:/

非常感谢您的尝试和欢呼:)

【问题讨论】:

  • 可以添加wojewodztwo对象的代码吗?
  • 您能否展示一个之前和之后的示例,说明您希望链接如何显示?
  • @PatrickGunderson wojewodztwo 只是一个将被替换的 div:'
    '
  • 您的 HTML 无效,必须是 &lt;a href="javascript:ReplaceContentInContainer('wojewodztwo', '&lt;a href=&amp;qout;http://address.com&amp;qout;&gt;superlink&lt;/a&gt;')"&gt;(注意转义引号)
  • @Bergi &amp;quot; 没有被转义,它是一个实体引用。 \" 被转义,%22 被 url 编码。

标签: javascript jquery html-lists anchor


【解决方案1】:

就像完全从侧面看这个,我建议避免嵌套的怪异/复杂性,并减少问题。

将内容设置为隐藏(即&lt;div id="replacements"&gt;...&lt;/div&gt;)从您想要的节点中获取innerHTML,然后完成它。

以这种方式从非开发人员那里获取替换内容也容易得多,如果您在团队中,效果会很好。

// Probably better in a separate helpers.js file.
   function replaceContentInContainer(target, source) {
      document.getElementById(target).innerHTML = document.getElementById(source).innerHTML;
   }

通过以下方式控制它:(失去href=javascript: 并使用onClick,最好使用event handler,但为简洁起见,我将在此处将其作为onClick 属性内联,并使用按钮。)

<button onClick="replaceContentInContainer('target', 'replace_target')">Replace it</button>

我们在文档的某处有我们的目标。

<div id="target">My content will be replaced</div>

然后替换内容隐藏在替换 div 中。

<div id="replacements" style="display:none">
  <span id="replace_target"><a href="http://address.com">superlink</a></span>
</div>

这里是JSBin

通过使用Handlebars 或另一个不错的 JS 模板库来改进它的动态特性,但这是 OP 的练习。

edit:请注意,您还应该使用前导小写字母命名函数,并为类名称保留前导大写样式,例如var mySweetInstance = new MySpecialObject();

【讨论】:

  • OMG IT WORKS ''
  • 总是尝试使用抽象/间接(“分而治之”,如果你愿意的话)来解决问题,它们会变得更容易,你越是把事情分开,当你回来的时候感觉会更愉快给它。
【解决方案2】:

引号不匹配!因此,当您单击时,您会收到 JavaScript 错误。

浏览器看到这个字符串:

href="javascript:ReplaceContentInContainer('wojewodztwo', '<a href="http://address.com">superlink</a>')">Pomorskie<

作为:

href="javascript:ReplaceContentInContainer('wojewodztwo', '<a href="

将 " 内部更改为 @quot;

<li class="pl11">
    <a href="javascript:ReplaceContentInContainer('wojewodztwo', '<a href=@quot;http://address.com@quot;>superlink</a>')">Pomorskie</a>
</li>

例如fiddle

另请注意,对 JavaScript 使用 href 标记是一种不好的做法。

【讨论】:

  • +1 用于超越给定 URL 并考虑空格。我删除了我的答案。虽然它在没有&amp;quot; 和 OP 的给定 URL 的情况下工作,但正如您正确指出的那样,它并不完全正确。正如您现在已经介绍过的那样,我无需在另一个答案中重复同样的事情。不错的收获。
  • 谢谢大家,但没有任何帮助,我编辑了这个问题并提出我想把它搁置。干杯!
【解决方案3】:

嵌套引号有问题。看看你的 DOM 检查器,看看 HTML 解析器是用它构建的! (以this demo 为例)

您需要将属性内的引号转义为&amp;quot;&amp;#34;,或者将它们转换为撇号并在JS 字符串中用反斜杠转义:

<a href="j[…]r('wojewodztwo', '<a href=&quot;http://address.com&quot;>superlink</a>')">…
<a href="j[…]r('wojewodztwo', '<a href=\'http://address.com\'>superlink</a>')">…

查看工作演示 herehere

更好的是,您应该使用onclick 属性而不是javascript-pseudo-url:

<a onclick="ReplaceContentInContainer('wojewodztwo', …)">Pomorskie</a>

甚至是javascript-registered event handler:

<li class="pl11">
    <a id="superlink">Pomorskie</a>
</li>
<script type="text/javascript">
    function replaceContentInContainer(id,content) {
        var container = document.getElementById(id);
        container.innerHTML = content;
    }
    document.getElementBId("superlink").onclick = function(event) {
        replaceContentInContainer('wojewodztwo', '<a href="http://address.com">superlink</a>');
        event.prevenDefault();
    };
</script>

(demo)

【讨论】:

  • 在演示中效果很好!一会儿我就试试这个 :) 谢谢!
  • 好的,它对我不起作用:/感谢您的帮助。我想我会用#links 跳转到不同的div 而不是替换一个。谢谢和欢呼!
  • 哇,我有点惊呆了,\" 在这种情况下不起作用。
  • @Slomojo 是的,我正在尝试最北边的那个(在地图上)
  • @user1399364 是的,我对使用\' 感到有点担心,即使它确实有效,我也会担心它(可能在另一个(未来?)JS 引擎中损坏,并且超级很难找到/调试。)归根结底,最好使用更多的间接性来完成,这样您就可以以不那么脆弱的方式组合锚元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 2017-05-25
  • 1970-01-01
  • 2016-02-18
  • 2017-12-22
  • 1970-01-01
相关资源
最近更新 更多