如何在jQuery中拼接字符串、jQuery对象与字符串并实现外层div包裹
解决方法:用DOM元素操作替代字符串拼接实现包裹效果
我完全懂你的困扰——你想让part1里的<div>把复选框、颜色选择器(tmpCp)和输入框全部包裹,但直接用字符串形式的开标签append会自动补全闭合标签,强行拼接的话jQuery对象又会变成[Object object]。这本质是因为jQuery处理字符串HTML时会自动生成完整DOM节点,而对象直接转字符串会返回默认的toString结果。
下面是调整后的思路和完整实现:
核心思路
别用字符串写<div>的开标签,直接用jQuery创建这个外层容器div,然后把所有内容依次添加到这个容器里,就能保证所有元素被正确包裹,同时保留jQuery对象的功能。
修改后的完整代码
// 1. 创建外层包裹div(对应原part1里的div),直接用jQuery操作DOM元素 var containerDiv = $(document.createElement('div')) .attr('id', `div${iCnt}`) .css('padding', '5px'); // 2. 添加part1里的复选框部分到容器 var checkboxHtml = `<input type='checkbox' onchange="checkboxOnChange(this,'${tmpId}')"/>`; containerDiv.append(checkboxHtml); // 3. 创建并配置颜色选择器tmpCp,再添加到容器 var tmpCp = $(document.createElement('div')) .css({margin:'5px',width: '30px',height: '30px',background: 'url(./images/select.png) center'}) .attr('id', `${tmpId}_CP`); tmpCp.ColorPicker({ color: '#0000ff', onShow: function (colpkr) { $(colpkr).fadeIn(500); return false; }, onHide: function (colpkr) { $(colpkr).fadeOut(500); return false; }, onChange: function (hsb, hex, rgb) { $(`#${tmpId}_CP`).css('backgroundColor', '#' + hex); $(`.${tmpId}`).css('background', '#' + hex); } }); containerDiv.append(tmpCp); // 4. 添加part2里的输入框和隐藏域到容器 var inputHtml = `Log file ${iCnt}: <input type=text class="input" id="tb${iCnt}"> <input id="tbid${iCnt}" type="hidden" value="${tmpId}"/>`; containerDiv.append(inputHtml); // 5. 最后把整个容器添加到页面目标位置(示例:添加到body) // $('body').append(containerDiv);
为什么这样可行?
- 我们直接创建了jQuery对象形式的外层div(
containerDiv),后续所有append操作都是往这个div内部添加元素,不会出现自动闭合的问题。 tmpCp作为jQuery对象直接被添加到容器,完整保留了它的DOM结构和绑定的ColorPicker插件功能,不会被转成字符串。- 字符串形式的HTML片段(复选框、输入框)会被jQuery自动解析成DOM元素,正常插入到容器中。
这样就能完美实现你想要的“外层div包裹所有内容”的效果啦!
内容的提问来源于stack exchange,提问作者nathan1658
相关产品推荐
相关产品推荐

