我正在尝试使用JavaScript动态地将子元素(li元素)附加到现有列表中。
目标DOM :
<body>
<div class="dd" name="agenda-nestable" id="nestable">
<ol id="agenda-root" class="dd-list">
<li class="dd-item" id="2879">
<div class="dd-handle">Section123</div>
</li>
<li class="dd-item" id="2880">
<div class="dd-handle">Section 4</div>
</li>
<li class="dd-item" id="2881">
<div class="dd-handle">Section 5</div>
</li>
</ol>
</div>
<button value onclick='addSection()'>Add Section</button>
</body>
JavaScript的:
function addSection() {
var data = { SectionId: 123, SectionText: 'Section Name'};
var agendaDiv = $("[name='agenda-nestable']");
var agendaSections = $(agendaDiv).find("ol#agenda-root");
agendaSections.appendChild('<li class="dd-item" data-id="' + data.SectionId + '" id="' + data.SectionId + '">' +
'<div class="dd-handle">' + data.SectionText + "</div></li>");
}
插入:https://plnkr.co/edit/jLi9epblNAtMbzezcRSY?p=preview
有人可以看看,让我知道我做错了什么?它似乎应该是直截了当的,我相信我正在遍历DOM。 : - /
谢谢,
菲利普
答案 0 :(得分:3)
appendChild
不是jQuery函数;它是DOM API的一部分,您只能在DOM节点上使用它。 jQuery对象不是DOM节点。但是,当您可以创建实际的<li>
元素时,没有理由首先操纵HTML:
agendaSections.append(
$('<li>', {
class: "dd-item",
'data-id': data.SectionId,
id: data.SectionId,
}).append(
$('<div>', { class: 'dd-handle', text: data.SectionText })
)
);
如果SectionText
是用户提供的数据,这也会阻止HTML注入。
答案 1 :(得分:2)
尝试将appendChild()
替换为append()
:
function addSection() {
var data = { SectionId: 123, SectionText: 'Section Name'};
var agendaDiv = $("[name='agenda-nestable']");
var agendaSections = $(agendaDiv).find("ol#agenda-root");
agendaSections.append('<li class="dd-item" data-id="' + data.SectionId + '" id="' + data.SectionId + '">' +
'<div class="dd-handle">' + data.SectionText + "</div></li>");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<div class="dd" name="agenda-nestable" id="nestable">
<ol id="agenda-root" class="dd-list">
<li class="dd-item" id="2879">
<div class="dd-handle">Section123</div>
</li>
<li class="dd-item" id="2880">
<div class="dd-handle">Section 4</div>
</li>
<li class="dd-item" id="2881">
<div class="dd-handle">Section 5</div>
</li>
</ol>
</div>
<button value onclick='addSection()'>Add Section</button>
</body>
答案 2 :(得分:1)
方法appendChild
来自本地js。 agendaSections
是一个jQuery元素,因此您需要使用jQuery中的append()
方法。
答案 3 :(得分:0)
将您的generateRemoveSectionDropDown
方法代码更改为:
function generateRemoveSectionDropDown() {
$("#nestable ol#agenda-root>li").each( function() {
$('#RemoveSectionId').append($('<option>', {text: $(this).text() }));
});
}
并添加到您的HTML:
<select id="RemoveSectionId"></select>
它会很好用。
请参阅plunk。