简短版本:我如何(使用JQuery或其他选择器)选择由JSP 2.0标记文件的此实例创建的HTML元素,每个页面可以多次使用?
长版:
我有一个JSP 2.0标记文件,如下所示:
<%@ tag body-content="empty" import="org.myapp.model.Question" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ attribute name="question" required="true" type="org.myapp.model.Question" %>
<div class='singleChoice'>
<c:forEach items="${question.questionOptions}" var="option">
<!-- display options... -->
</c:forEach>
</div>
此标记可在给定页面上多次使用。如果question.questionOptions的大小小于3,我想在此标记生成的'singleChoice'div中添加一个额外的CSS类('compact')。我想在tagfile中添加逻辑(JavaScript,其他JSTL,无论什么是必要的)来检查questionOptions的长度,并在必要时将类添加到div。
我知道我可以在标记文件中添加一个脚本标记,如下所示:
<c:if test="${fn:length(question.questionOptions) < 3}">
<script type="text/javascript">
$(document).ready(function() {
$('div .singleChoice').addClass('compact');
});
</script>
</c:if>
但由于在整个文档准备就绪时执行,并且标记可能在页面中多次出现,它会将“紧凑”类应用于页面上的所有'singleChoice'div,如果它们中的任何一个满足条件应用它。当我不知道ID时(如果我不想设置ID),如何在tagfile中指定 this div?
答案 0 :(得分:1)
如果${question.questionOptions}
小于3,是否要添加“紧凑”类?如果是,我建议的解决方案是添加一个条件,用div =“singleChoice compact”设置div。
<c:set var="divClass" value="singleChoice" />
<c:if test="${fn:length(question.questionOptions) < 3}">
<c:set var="divClass">singleChoice compact</c:set>
</c:if>
<div class='${divClass}'>
<c:forEach items="${question.questionOptions}" var="option">
<!-- display options... -->
</c:forEach>
</div>
这个解决方案没有经过测试,但如果我理解你的问题是正确的,那么逻辑是存在的。