链式方法调用对原始元素和克隆元素都不起作用,为什么?
Chained method calls doesn't work on original nor cloned element, why?
我有以下HTML:
<input type="text" id="condition_value_1" style="display: none" />
<button id="showme">Make Select2</button>
<button id="clickme">Make Input</button>
然后看看下面的jQuery:
$(function() {
var cond1 = $('#condition_value_1');
var cloned_cond1 = cond1.clone();
var cond1_select = '<select name="condition_value_1" id="condition_value_1" multiple="multiple"><option></option><option value="1">Opt1</option><option value="2">Opt2</option></select>';
$('#showme').click(function() {
cond1.removeAttr('style').replaceWith(cond1_select).select2({
placeholder: 'Select choice'
});
});
$('#clickme').click(function() {
if ($('#condition_value_1').hasClass('select2-hidden-accessible')) {
$("#condition_value_1").select2('destroy');
}
$('#condition_value_1').replaceWith(cloned_cond1).removeAttr('style');
});
});
您可以尝试上面的代码这里。
现在只要你点击#showme
,你应该删除attr样式,将原始元素替换为给定的元素,并将其转换为Select2,最后一部分不起作用。
在另一边,如果你点击#clickme
,你应该破坏之前的Select2,用克隆元素替换#condition_value_1
,并删除attr样式,因为克隆的具有该属性,但这也不起作用。
这个想法是在元素之间切换,并根据需要打开/关闭属性。
也许我在这里错过了什么,但我不确定是什么。有人能帮我吗?
更新小提琴。
我建议使用一个容器,然后附加你想要的元素,检查下面的例子。
希望对你有帮助。
$(function() {
var cond1 = $('#condition_value_1');
var cloned_cond1 = cond1.clone();
var cond1_select = '<select name="condition_value_1" id="condition_value_1" multiple="multiple"><option></option><option value="1">Opt1</option><option value="2">Opt2</option></select>';
$('#showme').click(function() {
$("#my-container").html(cond1_select);
$("#condition_value_1").select2({placeholder: 'Select choice',width:'100%'});
});
$('#clickme').click(function() {
if ($('#condition_value_1').hasClass('select2-hidden-accessible')) {
$("#condition_value_1").select2('destroy');
}
$("#my-container").html(cloned_cond1);
$("#condition_value_1").show();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="http://cdnjs.cloudflare.com/ajax/libs/select2/3.2/select2.css" rel="stylesheet"/>
<script src="http://cdnjs.cloudflare.com/ajax/libs/select2/3.2/select2.min.js"></script>
<div id="my-container">
<input type="text" id="condition_value_1" name="condition_1" style="display: none" />
</div>
<button id="showme">Make Select2</button>
<button id="clickme">Make Input</button>
问题是replaceWith
返回删除的元素,而不是新元素。我建议走另一条路:
$(function() {
var cond1 = $('#condition_value_1');
var cloned_cond1 = cond1.clone().removeAttr('style');
var cond1_select = '<select name="condition_value_1" id="condition_value_1" multiple="multiple"><option></option><option value="1">Opt1</option><option value="2">Opt2</option></select>';
$('#showme').click(function() {
cond1.replaceWith(cond1_select);
$("#condition_value_1").select2({
placeholder: 'Select choice'
});
cond1 = $("#condition_value_1");
});
$('#clickme').click(function() {
if ($('#condition_value_1').hasClass('select2-hidden-accessible')) {
$("#condition_value_1").select2('destroy');
}
$('#condition_value_1').replaceWith(cloned_cond1);
cond1 = $('#condition_value_1');
});
});
请注意,在替换任何东西之前,我已经从克隆中删除了属性;那样的话,你就不用担心了。
还请注意,在showme
点击处理程序中,我们替换了HTML,然后获得$("#condition_value_1")
的新钩子。这是因为cond1
不再在DOM中,因为您已经用第一行的HTML替换了它。
同样,在clickme
单击处理程序中,您需要重置cond1
的值以匹配您的新HTML。
相关文章:
- iframe中的jQuery查找元素不起作用
- jQuery选择ajax调用中附加的元素不起作用
- 我的ID获取元素不起作用
- 为什么从 Angular 服务中的对象中删除此元素不起作用
- 将onclick事件附加到元素不起作用
- <标题>插入SVG的元素不起作用
- 使用next()的jQuery目标元素不起作用
- HTML输入元素不起作用
- 使用css显示和隐藏元素不起作用
- 焦点到 DOM 元素不起作用
- Jquery 在图像错误上对多个元素不起作用
- 按类名获取元素不起作用
- jQuery - 'addClass' to HTML 元素 - 不起作用,但在 Chrome 中正确显
- 具有 ID AND 类的 jQuery 选择器目标元素不起作用
- Ajax 对 xml 页面的响应以获取标题元素不起作用
- 单击新 DOM 元素不起作用的事件
- Javascript 添加的动态 svg 元素不起作用
- jQuery on handler 对插入的元素不起作用
- 从表单中删除添加的元素不起作用
- 相对于另一个元素的位置元素不起作用