javascript - 使用 Javascript 的动态 HTML : Fill same HTML object with different contents

标签 javascript html css dom

这是一般性问题:
当有一个 HTML 对象根据 DOM 事件以不同方式填充时,哪个是最佳解决方案?

我的情况尤其如此:
我有一个导航栏,其中每个按钮都显示一个模态。模态框的骨架始终相同,但正如您想象的那样,内容会根据按钮而变化。
然后我想使用 Javascript 和 onclick 属性让每个按钮以不同的方式填充模式,这或多或少是它的样子:

<li><a data-toggle="modal" data-target="#myModal" id="button1" onclick="fillmodal(this.id)">Text button1</a></li>
<li><a data-toggle="modal" data-target="#myModal" id="button2" onclick="fillmodal(this.id)">Text button2</a></li>
<li><a data-toggle="modal" data-target="#myModal" id="button3" onclick="fillmodal(this.id)">Text button3</a></li>

让我们想象一下:

  • Button1 必须在模态框内仅显示带有一些图像的文本。
  • Button2 必须在模态框内显示一个带有文本区域和提交按钮的表单。
  • Button3 必须显示与 Button2 相同的形式,但多了 2 个字段。

如您所见,内容始终不同,但某些元素可以共享(在我们的示例中,Button2 和 Button3 显示的文本区域就是这种情况)。

有许多不同的方法可以解决这个问题:

我可以在 HTML 中编写一个完全空的模式,函数 fillmodal(elementId) 可以完成所有工作来填充它,但我发现这个解决方案非常难看,因为它在脚本中占用了很多行填充模式,那么另一种解决方案是使用 AJAX 请求以直接从服务器获取内容。
我认为第二种解决方案在按钮很多的情况下是最好的。

到目前为止,我发现的最佳解决方案是将所有内容直接写入模态中作为 hidden 元素,并使函数 fillmodal(elementId) 显示仅更改属性所需的内容.

您认为哪个是最好的解决方案?

最佳答案

针对您要实现的目标,有许多不同的解决方案。

这是一个(每个按钮一个模式):

<li><a id="button1" onclick="showmodal(this.id)">Text button1</a></li>
<li><a id="button2" onclick="showmodal(this.id)">Text button2</a></li>
<li><a id="button3" onclick="showmodal(this.id)">Text button3</a></li>

<div style="display: none;" class="modal" id="button1_content">Content 1</div>
<div style="display: none;" class="modal" id="button2_content">Content 2</div>
<div style="display: none;" class="modal" id="button3_content">Content 3</div>

function showmodal(id) {
    document.getElementById(id+'_content').style.display = "block";
}

这是另一个(从另一个 div 获取模态的 html):

<li><a id="button1" onclick="showmodal(this.id)">Text button1</a></li>
<li><a id="button2" onclick="showmodal(this.id)">Text button2</a></li>
<li><a id="button3" onclick="showmodal(this.id)">Text button3</a></li>

<div style="display: none;" id="button1_content">Content 1</div>
<div style="display: none;" id="button2_content">Content 2</div>
<div style="display: none;" id="button3_content">Content 3</div>

<div id="modal">Content 3</div>

function showmodal(id) {
    document.getElementById('modal').innerHTML =
      document.getElementById(id+'_content').innerHTML;
}

关于javascript - 使用 Javascript 的动态 HTML : Fill same HTML object with different contents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29054919/

相关文章:

javascript - 请求失败,状态码 409 : React Front End & Python Flask Back End

javascript - 为什么indexOf 不能在IE8 上工作?

javascript - window.open() 在 Knockout.js 中不起作用

javascript - 如何在 Bootstrap-DateTimePicker 中启用日期和时间选择器

html - 如何让一个对象不占用它的自然宽度

css - 自定义样式的箭头工具提示

html - 移动图像位置

javascript - jquery ui 按钮没有样式

html - 如何让导航栏跟随页面?

html - 如何在圆的边缘放置图标