javascript – 为什么从选择列表中选择一个选项时,DOM没有被修改?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 为什么从选择列表中选择一个选项时,DOM没有被修改?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4513字,纯文字阅读大概需要7分钟。
内容图文
![javascript – 为什么从选择列表中选择一个选项时,DOM没有被修改?](/upload/InfoBanner/zyjiaocheng/751/e1cf77caab0448b28159f7d353e9e1db.jpg)
我这里有一个简单的例子.这是一个带有js和css文件的“all in one”html.
我正在使用DataTables响应主题.
以下是问题复制步骤:
1)将以下代码保存到html文件中
2)在Chrome浏览器中打开此文件
3)减小浏览器的大小,使第四个字段不可见
4)单击绿色“”扩展按钮
5)选择任何值
6)单击绿色“”按钮折叠
7)再次单击绿色“”按钮展开
8)实际上并未选择您选择的值
为什么???
<html>
<head>
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.1/js/dataTables.responsive.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.2.1/css/responsive.dataTables.min.css">
<script>
$(document).ready(function() {
$('#example').DataTable();
} );
</script>
</head>
<body>
<table id="example" class="display responsive nowrap" style="width:100%">
<thead>
<tr>
<th>First name</th>
<th>Last name</th>
<th>Position</th>
<th>Weird JQuery Behaviour</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tiger</td>
<td>Nixon</td>
<td>System Architect</td>
<td>
<select>
<option value="123">123</option>
<option value="345">345</option>
<option value="456">456</option>
<option value="567">56</option>
<option value="678">67</option>
<option value="789">789</option>
</select>
</td>
</tr>
</tbody>
</table>
</body>
</html>
我必须保持所选条目显示为已选中.我怎样才能做到这一点?
解决方法:
有一个渲染引擎,每次显示或隐藏列时都会重新创建元素.显然,选择元素内部状态不会跟随.
您可以访问渲染功能并对其进行修改以创建链接.该函数可在datable选项中调用,如下所示:
responsive: {
details: {
renderer: function ( api, rowIdx, columns )
为显示或隐藏的每一行调用渲染.因此,当您单击加号或者列宽足以显示原始列时,会调用它.您可以在该函数中构建要添加的元素,并在select元素上设置正确的索引.但由于它是一个不同的选择,你需要跟踪它上面所做的更改,以便更新原始版本.像这样的东西:
$(document).ready(function() {
$('#example').DataTable({
responsive: {
details: {
renderer: function(api, rowIdx, columns) {
// normally the render is only the data part, and then you return data
var data = $.map(columns, function(col, i) {
return col.hidden ?
'<tr data-dt-row="' + col.rowIndex + '" data-dt-column="' + col.columnIndex + '">' +
'<td>' + col.title + ':' + '</td> ' +
'<td>' + col.data + '</td>' +
'</tr>' :
'';
}).join('');
// this is the custom part in which you manipulate the data before it is returned
if (data) {
var el = document.createElement('div');
el.innerHTML = data;
// here you set your new select element to the same index as the original one
el.querySelector('select').selectedIndex = api.cell({
row: rowIdx,
column: 3
}).node().querySelector('select').selectedIndex;
// you need to track changes on this new one to update original
el.querySelector('select').addEventListener('change', function(e) {
api.cell({
row: rowIdx,
column: 3
}).node().querySelector('select').selectedIndex = e.target.selectedIndex;
});
// you return a table with your element, which is the same as with the original
// render, but with the select set to proper index
return $('<table/>').append(el);
// this is also part of the original. This is called when no column is hidden
// you return nothing and so your element is removed
} else {
return false;
}
}
}
}
});
});
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.1/js/dataTables.responsive.min.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.2.1/css/responsive.dataTables.min.css">
<table id="example" class="display responsive nowrap" style="width:100%">
<thead>
<tr>
<th>First name</th>
<th>Last name</th>
<th>Position</th>
<th>Weird JQuery Behaviour</th>
</tr>
</thead>
<tbody>
<tr>
<td>Tiger</td>
<td>Nixon</td>
<td>System Architect</td>
<td>
<select>
<option value="123">123</option>
<option value="345">345</option>
<option value="456">456</option>
<option value="567">56</option>
<option value="678">67</option>
<option value="789">789</option>
</select>
</td>
</tr>
<tr>
<td>Tiger</td>
<td>Nixon</td>
<td>System Architect</td>
<td>
<select>
<option value="123">123</option>
<option value="345">345</option>
<option value="456">456</option>
<option value="567">56</option>
<option value="678">67</option>
<option value="789">789</option>
</select>
</td>
</tr>
</tbody>
</table>
内容总结
以上是互联网集市为您收集整理的javascript – 为什么从选择列表中选择一个选项时,DOM没有被修改?全部内容,希望文章能够帮你解决javascript – 为什么从选择列表中选择一个选项时,DOM没有被修改?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。