Thymeleaf为动态拼接的元素src链接写法

近期使用Thymeleaf引擎时遇到不少问题,作者记录下来避免后续麻烦。正常为页面添加背景用th:url=\@{…}\,若将CSS样式放到.css中,只需url(…),且引用路径相同,还提及了src相关内容。

Thymeleaf为动态拼接的元素src链接写法

近期使用thymeleaf引擎,发现实际情况的许多坑,记录避免以后遇到类似麻烦

首先说下 URL:
正常情况下为页面添加背景使用 th:url="@{…}"即可,但是将这些CSS样式提出来放到 .css 中时 只需url(…),其中引用的路径相同;

例如: .header_bg{height:945px; background:#151515 url(/image/login/bg.jpg);}

src:

使用ajax动态添加节点的src链接,无需th:src="@{...}"直接src="..."即可(链接地址...相同)。

参考:
success:function(datas){
	datas = eval(datas);
	var sonFiles="";
	for(var s=0; s < datas.length;s++){
		if(datas[s].isFile == 1){
			sonFiles+='<p><img id="'+datas[s].name+'" src="/image/XT/folder.jpg" class="img_1" width="129" height="91">'+datas[s].name+'<br /></p>';
		}else{
			sonFiles+='<p><img id="'+datas[s].name+'" src="/image/XT/file.png" class="img_2" width="129" height="91">'+datas[s].name+'<br /></p>';
		}
	}
	//$(".img_1").attr("src","/image/XT/folder.jpg");
	//$(".img_2").attr("src","/image/XT/file.png");
	//$("#js").attr("src","/image/XT/file.png");
	$("#sonFiles").html(sonFiles);
}

说明下:刚开始我是th:src拼接的,发现不行,查看页面代码,发现新元素就是单纯的拼接样式。参照网上其他人的经验,在去掉链接在下面为新的元素添加属性渲染还是不行,又把拼接的src地址改成相对地址依然不行,把新元素的CSS样式提前放到 .css 文件中也不行。
	按理说在下方为新添加的元素增加样式是可以的,以后再验证下。
### Thymeleaf 动态添加 HTML 元素的方法 在 Thymeleaf 中,可以通过多种方式动态插入 HTML 元素。这些方法不仅限于修改现有元素的内容,还可以创建新的 DOM 结构并将其注入到页面中。 #### 使用 `th:utext` 插入未转义的 HTML 片段 当需要向页面中嵌入完整的 HTML 代码片段时,可以利用 `th:utext` 属性。此属性允许服务器端生成的字符串包含实际的 HTML 标记而不对其进行编码处理: ```html <div th:utext="${dynamicHtmlContent}"> <!-- 这里的内容会被来自变量 dynamicHtmlContent 的值所替代 --> </div> ``` 需要注意的是,由于 `th:utext` 不会对输出做任何转义操作,因此应当谨慎使用以防止潜在的安全风险,比如跨站脚本攻击 (XSS)[^1]。 #### 利用条件语句控制元素显示与否 借助 Thymeleaf 提供的各种条件判断表达式,可以根据后台数据决定某些部分是否渲染出来。例如,下面的例子展示了如何基于布尔型变量的存在与否来切换 `<section>` 标签及其内部结构的可见性: ```html <section th:if="${showSectionFlag}"> <h2>这是一个有条件展示的部分</h2> <p>只有当 showSectionFlag 设置为 true 时才会看到这段文字。</p> </section> ``` 此外还有 `th:unless` 可用于相反逻辑——仅当给定条件不成立的情况下才呈现相应区域[^3]。 #### 循环遍历集合构建列表项 对于重复性的 UI 组件或者表格行这类场景,则可通过迭代器模式配合 `th:each` 来完成批量生产相似但又有所区别的子组件。如下所示,演示了怎样从服务端传递过来的一组实体对象构造出一系列带有复选框控件的数据条目: ```html <ul> <li th:each="item : ${items}"> <input type="checkbox" name="selectedItems" th:id="'cb-' + ${item.id}" th:checked="${someCondition(item)}" value="{{ item.value }}"> <label th:for="'cb-' + ${item.id}" th:text="${item.label}"></label> </li> </ul> ``` 上述代码片段里还体现了几个重要的细节:通过拼接 ID 实现唯一标识符;运用函数形式定义复杂的选择状态判定规则 `${someCondition(item)}`;以及采用双大括号表示法插值非简单类型的字段值 {{ }}[^4]。 #### 添加新节点至已有容器内 如果目标是在已存在的父级元素之下追加更多后代成员而不仅仅是替换整个区块的话,那么就可以考虑结合 JavaScript 或者 jQuery 库来进行客户端侧的操作。不过在此之前先要确保初始加载阶段就准备好占位空间以便后续挂载新增内容。一种常见做法就是预留好具备特定 CSS 类名或 data-* 自定义属性标记的目标位置,之后再由前端框架接管进一步的动作。 综上所述,Thymeleaf 支持丰富的手段帮助开发者轻松达成动态调整网页布局的目的,无论是直接变更文本还是更复杂的结构调整都能得到妥善解决。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值