使用<script>和HTML5<template>作为模板元素的差别:能否使用jQuery选中

本文探讨了HTML5的<template>元素与<script>元素在用作模板时的差异,以及为何在某些情况下不建议使用<script>来选择和操作模板。内容涉及JS模板引擎的选择与最佳实践。

前端模板技术不是什么新技术了,有很多知名的js模板引擎,如:HandlebarsJS、Mustache 、artTemplate、还有我最近在学习的ionic框架等。这些模板引擎一般都是使用<script>来承载模板内容。

下面是HandlebarsJS的模板:

<script id="entry-template" type="text/x-handlebars-template">
	<div class="entry">
		<h1>{
  
  {title}}</h1>
		<div class="body">
		  {
  
  {body}}
		</div>
	</div>
</script>


下面是ionic框架popover的模板:
<script id="my-popover.html" type="text/ng-template">
	<ion-popover-view>
		<ion-header-bar>
		  <h1 class="title">My Popover Title</h1>
		</ion-header-bar>
		<ion-content>
		  Hello!
		</ion-content>
	</ion-popover-vi
``` <%@ page language="java" import="test_package.*" import="java.util.*" import="java.sql.*" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" href="../style/certificate.css"> </head> <body> <% List<test_information> list = (List<test_information>)session.getAttribute("date"); %> <div class = "tit">查看凭证</div> <div class = "Ribbon"> <table> <tr> <td style="white-space: nowrap;"> <!-- 按钮1 --> <input type="button" value="传统记账" class="R_button"> <!-- 表单2 - 导出 --> <form action="" class="inline-form"> <input type="submit" value="导出" class="R_button"> </form> <!-- 表单3 - 打印 --> <form id="printForm" action="white.jsp" method="post" class="inline-form"> <input type="hidden" id="selectedTelsHiddenField" name="telsToPrint"> <input type="submit" value="打印" onclick="return submitSelectedTels();" class="R_button"> </form> <!-- 按钮4 --> <input type="button" value="模板" onclick="template.show()" class="R_button"> </td> <td> <input type = "text" name = "search_name"> <input type = "button" value = "搜索"> </td> </tr> </table> </div> <div class="body"> <table class="cer" > <% for(test_information news:list) { %> <!-- 将每条记录分为两列展示 --> <tr> <td class="zero_box"> <input type="checkbox" name="selectedTels" value="<%=news.getTel()%>" onchange="updateSelection(this)" style = "zoom : 300%"> </td> <td class="first_box"> <%= news.getMaterial() %> <br/> <%= news.getStart_time() %> </td> <td class="second_box"> <%= news.getWashing_method() %> <br/> <%= news.getPrice() %> </td> <td class="third_box"> <form action =""> <input name = "id" value ="<%=news.getTel() %>" type = "hidden"> <input type ="submit" class = "func_button" value = "税费" ><br> <input type ="submit" class = "func_button" value = "查看凭证" ><br> <input type ="submit" class = "func_button" value = "删除凭证" > </form> <br/> </td> </tr> <% } %> </table> <div style="display:none;" id="printArea"></div> </div> <script> let selectedTelsArray = []; function updateSelection(el) { if (el.checked && !selectedTelsArray.includes(el.value)) { // 如果当前被选中,则加入集合 selectedTelsArray.push(el.value); } else { // 否则移除该元素 const indexToRemove = selectedTelsArray.indexOf(el.value); if (indexToRemove !== -1) { selectedTelsArray.splice(indexToRemove, 1); } } console.log(selectedTelsArray); // 输出调试信息 } // 提交之前设置 hidden field 的值 function submitSelectedTels() { document.getElementById('selectedTelsHiddenField').value = JSON.stringify(selectedTelsArray); return true; } </script> </body> </html>```对表格实现模糊搜索功能,搜索的字段为材质
03-18
<%-- Created by IntelliJ IDEA. User: 13498 Date: 2025/9/22 Time: 14:25 To change this template use File | Settings | File Templates. $.post("jjb.do",function (f){ $.each(f,function (i,e){ $("#xx").append("<option value='"+e.cid+"'>"+e.name+"</option>"); }) },"json") --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> <script src="js/jquery.js"></script> <script type="text/javascript"> $(function () { // $("#zzz").click(function () { // var vn = $("zzz").val(); // if (vn =="" || vn == null) { // alert("错误"); // return; // } // }) // $("#zzz").click(function (){ // var vn = $("#jiji").val(); // if (vn =="" || vn == null) { // alert("错误"); // return; // } // $.post("b.do",$("form").serialize(),function (f){ // if (f>0){ // alert("添加成功") // }else { // alert("添加失败") // } // }) // }) // $.post("jjb.do", function (f) { // $.each(f, function (i, e) { // $("#xxt").append("<option value='" + e.cid + "'>" + e.name + "</option>"); // }) // }, "json") $.post("jjb.do", function (e) { var citys = ' '; $.each(e, function (i, f) { citys += '<option value="' + f.cid + '">' + f.cname + '</option>'; }); // $("#abc").click(function (){ // $.post("c.do",$("button").serialize(),function (f){ // if (f>0){ // alert(yes) // }else { // alert(no) // } // }) // }) // $("#zzz").click(function (){ // const = $(this).val(); // $.post("m.do",$("form").serialize(),function (f){ // if (f>0){ // alert(yes) // }else { // alert(no) // } // }) // }) var f1 = '<div class="station-group">' + '<p> <select name="kk">' + citys + '</select>' + '<input type="hidden" name="kprice" id="xxt" value=" ">' + ' 0</p>' + '</div>'; $(".sc").before(f1); $(".abc1").click(function(e) { e.preventDefault(); var station = '<div class="station-group">' + '<p> <select name="kstation">' + citys + '</select>' + ' <input type="text" name="kprice">' + '</div>'; $(".sc").before(station); }); },"json"); $(".abc1").on("click", function (f1) { }); <%--$("#jiji").click(function (){--%> <%-- var qwe=${this}.val();--%> <%--})--%> $("#zzz").click(function () { $.post("m.do", function (f) { if (f == 2) { alert("添加成功") } else { alert("添加失败") } }); }); <%--//const selectedValue = $(this).val();--%> <%-- let counter = 1; // 元素计数器--%> <%-- // 添加输入框功能--%> <%-- function addInput() {--%> <%-- const container = document.getElementById("imsb");--%> <%-- // 创建下拉框容器--%> <%-- const dropdownContainer = document.createElement("div");--%> <%-- dropdownContainer.className = "dropdown-container";--%> <%-- dropdownContainer.id = `dropdown-${counter}`;--%> <%-- // 临时显示加载状态--%> <%-- dropdownContainer.innerHTML = `<select disabled>--%> <%-- <option>加载选项中...</option>--%> <%-- </select>`;--%> <%-- container.appendChild(dropdownContainer);--%> <%-- // AJAX 请求获取选项数据--%> <%-- fetch('jjb.do') // 替换为实际API端点--%> <%-- .then(response => response.json())--%> <%-- .then(options => {--%> <%-- // 创建下拉框元素--%> <%-- const select = document.createElement("select");--%> <%-- select.name = `dropdownField`+`${counter}`;/*${counter}*/--%> <%-- select.id = `ccc`+`${counter}`;/*${counter}*/--%> <%-- // 添加默认选项--%> <%-- const defaultOption = document.createElement("option");--%> <%-- defaultOption.value = " ";--%> <%-- defaultOption.textContent = "-- 请选择 --";--%> <%-- select.appendChild(defaultOption);--%> <%-- // 填充动态选项--%> <%-- options.forEach(option => {--%> <%-- const optionElement = document.createElement("option");--%> <%-- optionElement.value = option.cid;--%> <%-- optionElement.textContent = option.cname;--%> <%-- select.appendChild(optionElement);--%> <%-- });--%> <%-- // 替换加载状态--%> <%-- dropdownContainer.innerHTML = '';--%> <%-- dropdownContainer.appendChild(select);--%> <%-- })--%> <%-- .catch(error => {--%> <%-- console.error('加载选项失败:', error);--%> <%-- dropdownContainer.innerHTML = `<select class="error-state">--%> <%-- <option>加载失败,请重试</option>--%> <%-- </select>`;--%> <%-- });--%> <%-- const newInput = document.createElement("div");--%> <%-- newInput.className = "input-container";--%> <%-- newInput.innerHTML = `--%> <%-- <input type="text" placeholder="输入框 ${counter}" name="inputField${counter}">--%> <%-- `;--%> <%-- container.appendChild(newInput);--%> <%-- // 增:添加下拉框功能--%> <%-- const container = document.getElementById("inputsContainer");--%> <%-- const newDropdown = document.createElement("div");--%> <%-- newDropdown.className = "dropdown-container";--%> <%-- // 创建带选项的下拉框--%> <%-- newDropdown.innerHTML = `--%> <%-- <select name="dropdownField${counter}">--%> <%-- <option value=" ">-- 请选择 --</option>--%> <%-- </select>--%> <%--`;--%> <%-- container.appendChild(newDropdown);--%> <%-- counter++;--%> <%-- } // counter++; // } // // 增:动态加载下拉选项(可选功能) // function loadDropdownOptions(selectElement, options) { // options.forEach(option => { // const optionElement = document.createElement("option"); // optionElement.value = option.value; // optionElement.textContent = option.label; // selectElement.appendChild(optionElement); // }); // }optionElement--%> </script> </head> <body> <form id="imsb"> 车次名称: <input type="text" name="jiji" id="jiji" value=""> <button id="cid" class="abc1" name="abc">增加途径站</button> <button id="zzz" type="button">增</button> <div class="sc"> </div> </form> <%--<button id="zz" name="zz">添加途径站</button>--%> <%--<select id="xx" name="xx">--%> <%-- <option>--请选择--</option>--%> <%--</select>--%> <!-- 输入框容器 --> <%--<div id="inputsContainer">--%> <%-- <div class="input-container">--%> <%-- <input type="text" placeholder=" ">--%> <%-- </div>--%> <%--</div>--%> <!-- 添加按钮 --> <%--<button onclick="addInput()" id="zz" name="zz">添加途径站</button>--%> </body> </html> 点击添加为什么没有反应,要做任何状实代码,只要简单实现即可
09-24
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值