关于js append添加元素失效的解决方案

本文介绍了一种使用jQuery实现DOM元素动态添加与删除的方法。通过为按钮绑定点击事件,可以实现在页面上添加数据项,并为每个数据项提供删除功能。此方案适用于需要动态更新页面内容的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本篇文章支支持$(this)获取数据,不支持$(this)删除自身。

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<div>
    <span class="add">点我添加一条数据</span>
</div>


</body>
</html>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
    $('.add').on('click',function (){
        $(this).append("<span class='delete'>点击删除</span>")
    })
    $('div').on('click','.delete',function (){
        console.log($(this).text())
        $(this).remove()
    })
</script>

<think>我们正在讨论Dynamics 365 Portal开发中实现表头固定并随页面滑动的需求。 由于Portal基于Power Pages(之前称为ADX Studio),它使用Bootstrap框架,因此我们可以利用Bootstrap的表格响应式设计来实现固定表头。 另一种方法是使用CSS固定表头位置。下面将提供两种解决方案解决方案1:使用Bootstrap表格响应式 我们可以将表格包裹在一个具有`table-responsive`类的div中,并设置固定高度,然后使用CSS固定表头。 解决方案2:纯CSS固定表头 我们可以使用CSS的`position: sticky`属性来固定表头。 注意:由于Portal页面可能包含多个表格,我们需要针对特定的表格应用样式。 步骤: 1. 在Portal中,编辑页面模板或特定页面的源代码,添加CSS样式。 2. 为需要固定表头的表格添加一个特定的类(例如`sticky-header`)以便定位。 3. 编写CSS样式。 示例代码: 在页面的头部或自定义CSS文件中添加以下样式: ```css /* 为表格添加粘性表头 */ table.sticky-header thead tr th { position: sticky; top: 0; /* 距离顶部的距离,可以调整为导航栏的高度 */ z-index: 10; /* 确保表头在内容之上 */ background-color: #fff; /* 背景色,根据实际调整 */ } ``` 然后在表格上添加类`sticky-header`: ```html <table class="sticky-header"> <thead> <tr> <th>标题1</th> <th>标题2</th> </tr> </thead> <tbody> <!-- 表格内容 --> </tbody> </table> ``` 注意:如果页面有固定的导航栏,可能需要调整`top`的值,以避免表头与导航栏重叠。例如,如果导航栏高度为50px,则设置`top: 50px;`。 另外,如果表格在滚动容器内(如div设置了overflow),则需要确保`position: sticky`的父元素不是`overflow: hidden`的,否则会失效。 如果表格在滚动容器内,并且容器高度固定,那么表头会相对于该容器固定。 如果整个页面滚动,则表头会相对于视口固定。 在Portal中,通常整个页面是滚动的,所以使用`position: sticky`可以很好地工作。 但是,请注意兼容性:`position: sticky`在现代浏览器中得到支持,但在一些旧版本浏览器(如IE)中不支持。如果需要支持旧版浏览器,可能需要使用JavaScript。 如果需要JavaScript解决方案,我们可以使用以下方法: 1. 复制表头,创建两个表头,一个固定,一个正常。 2. 监听滚动事件,当表格滚动到视口顶部时,显示固定表头,否则隐藏。 但考虑到Portal的性能和简洁性,推荐使用CSS方案。 因此,总结如下: 1. 使用CSS的`position: sticky`是最简单的方案。 2. 添加自定义CSS到页面中。 3. 为需要固定表头的表格添加类名。 如果遇到问题,检查表格结构是否正确,以及是否有父元素设置了`overflow: hidden`。 另外,如果表头背景色透明,可能需要设置背景色,否则滚动时内容会穿透。 在Portal中,可以通过主题定制添加自定义CSS,或者通过Web文件上传CSS文件并引用。 步骤: 1. 登录Portal管理。 2. 转到“内容”>“Web文件”,上传CSS文件(如果有),或者直接在页面模板中插入样式。 3. 或者,在“站点设置”中,查找“自定义CSS”的选项(具体路径可能因版本而异)添加CSS。 如果使用Bootstrap 4或5,它们本身支持粘性表头,但需要确保Bootstrap版本正确。 由于Dynamics 365 Portal(Power Pages)默认使用Bootstrap 3,但某些版本可能升级,请根据实际情况调整。 在Bootstrap 3中,我们可以直接使用上述CSS方法。 因此,我们推荐使用CSS方法。 示例代码: 在Portal页面的头部添加以下样式(或者通过主题编辑器添加): ```html <style> table.sticky-header thead tr th { position: -webkit-sticky; /* Safari */ position: sticky; top: 0; background: white; /* 背景色根据你的主题调整 */ box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.4); } /* 如果有固定的导航栏,调整top值 */ body.has-navbar-fixed-top table.sticky-header thead tr th { top: 50px; /* 假设导航栏高度50px */ } </style> ``` 然后,在表格上添加类`sticky-header`。 注意:如果表头固定后出现抖动或闪烁,可以尝试添加`will-change: transform;`属性。 如果上述方法无效,请检查是否因为表格的父元素有`overflow: hidden`,如果有,需要移除或改为`overflow: auto`。 最后,如果表格在滚动时表头不固定,请检查: - 父元素是否设置了`overflow`属性(hidden、auto、scroll)?如果是,则粘性定位相对于该父元素。如果不需要,可以调整父元素。 - 确保表格的父元素有足够的高度,以便滚动。 如果问题仍然存在,可能需要使用JavaScript解决方案。 JavaScript解决方案示例(使用jQuery,因为Portal默认包含jQuery): 我们可以创建一个固定在顶部的表头克隆,当原始表头滚动到视口外时显示克隆表头,反之隐藏。 步骤: 1. 克隆表头,并设置克隆表头为固定定位,初始隐藏。 2. 监听滚动事件,当原始表头滚动出视口时,显示克隆表头;当滚动回视口时,隐藏克隆表头。 代码示例: ```javascript $(document).ready(function() { // 为表格添加一个容器,并设置相对定位以便克隆表头定位 $('table.sticky-header').each(function() { // 创建克隆 var $clonedHeader = $(this).find('thead').clone(); // 创建包含克隆的div var $stickyHeader = $('<div class="sticky-header-clone"></div>').append($clonedHeader); // 在表格前插入克隆 $(this).before($stickyHeader); // 设置初始状态 $stickyHeader.hide(); // 监听滚动 $(window).scroll(function() { var tableOffset = $(this).offset().top; var scrollTop = $(window).scrollTop(); // 如果表格顶部滚出视口,则显示克隆表头 if (scrollTop > tableOffset) { $stickyHeader.show(); } else { $stickyHeader.hide(); } }); }); }); ``` 同时,需要为克隆的表头添加样式: ```css .sticky-header-clone { position: fixed; top: 0; /* 如果有导航栏,改为导航栏高度 */ left: 0; width: 100%; /* 可能需要调整宽度 */ z-index: 1000; background: white; display: none; /* 初始隐藏 */ } /* 确保克隆表头的表格宽度和原表一致 */ .sticky-header-clone table { width: 100%; margin: 0; } ``` 注意:这种方法需要确保克隆表头的列宽与原表头一致,并且需要处理窗口大小改变时的重绘。 由于JavaScript方案更复杂,且可能影响性能(滚动事件频繁触发),因此优先推荐CSS方案。 总结: 在D365 Portal中实现固定表头,优先使用CSS的`position: sticky`,如果不支持或遇到布局问题,再考虑JavaScript方案。 相关问题: 1. 在D365 Portal中如何添加自定义CSS? 2. 如何为特定的表格添加类名? 3. 如果使用JavaScript方案,如何优化滚动事件的性能? 4. 如何确保克隆表头的宽度与原始表格一致?</think>### D365 Portal 表头固定随页面滑动的实现方法 在D365 Portal开发中实现表头固定并随页面滚动,主要有以下两种解决方案: --- ### 方案1:CSS粘性定位(推荐) 这是最简洁高效的实现方式,利用CSS的`position: sticky`属性: ```html <style> /* 添加粘性表头样式 */ .sticky-header thead th { position: sticky; top: 0; /* 距离顶部的距离 */ background-color: #fff; /* 背景色需匹配页面 */ z-index: 100; /* 确保表头在内容上方 */ box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* 可选:添加阴影增强层次感 */ } /* 针对Portal的调整 */ .table-container { max-height: 500px; /* 设置滚动区域高度 */ overflow-y: auto; /* 启用垂直滚动 */ } </style> <div class="table-container"> <table class="sticky-header"> <thead> <tr> <th>姓名</th> <th>邮箱</th> <th>电话</th> </tr> </thead> <tbody> <!-- 动态生成的数据行 --> </tbody> </table> </div> ``` **关键点说明**: 1. `top: 0`表示当表头滚动到视口顶部时固定 2. 背景色必须设置(否则会透明) 3. 通过`z-index`确保表头始终在最上层 4. 需要为表格容器设置固定高度和`overflow-y: auto` **Portal适配建议**: - 在Portal的**站点设置**中添加自定义CSS - 如果使用响应式表格,添加`table-responsive`类 - 如果页面有固定导航栏,调整`top`值(如`top: 60px`) --- ### 方案2:JavaScript实现 当需要兼容旧版浏览器时,可使用jQuery插件实现: ```javascript // 1. 引入jQuery插件(如FixedHeader) $.getScript("https://cdn.jsdelivr.net/npm/[email protected]/js/dataTables.fixedHeader.min.js", function() { // 2. 初始化表格 $('#myTable').DataTable({ fixedHeader: true, responsive: true }); // 3. 适配Portal主题 $('.fh-fixedHeader').css('background-color', '#f8f9fa'); }); ``` **配置步骤**: 1. 在页面模板中引用jQuery和DataTables库 2. 为表格添加ID(如`id="myTable"`) 3. 在自定义JavaScript文件中初始化插件 4. 通过CSS调整固定表头的样式 --- ### 常见问题解决方案 | 问题现象 | 解决方法 | |---------|---------| | 表头闪烁/抖动 | 添加`transform: translateZ(0)`触发GPU加速 | | 表头与内容错位 | 确保`<th>`和`<td>`的宽度一致 | | 移动端显示异常 | 添加`@media`响应式断点调整`top`值 | | 固定位置偏移 | 检查父容器是否有`overflow:hidden`属性 | | 打印时表头重复 | 添加`@media print { .sticky-header { position: relative } }` | --- ### 最佳实践建议 1. **性能优化**: - 优先使用CSS方案(性能开销小) - 避免在滚动事件中直接操作DOM - 对大数据集使用虚拟滚动 2. **Portal集成**: - 通过**Web Templates**实现代码复用 - 在**站点设置**中添加全局CSS类 - 使用**JavaScript Web Resources**管理脚本 3. **用户体验**: - 固定表头添加轻微阴影增强层次感 - 滚动时高亮当前列(通过`:hover`状态) - 移动端启用触摸友好型滚动条 > 根据微软官方文档,D365 Portal使用Bootstrap 3框架,建议优先使用原生CSS方案以确保最佳兼容性[^1]。对于复杂表格场景,可结合使用DataTables插件和Portal的OData数据集成功能[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值