如何选择由JSP 2.0标记文件的特定实例生成的元素



简短版本:如何(使用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")。我想在标记文件中添加逻辑(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中的任何一个符合应用它的标准,它将对其应用"compact"类。当我不知道ID(并且希望避免设置它)时,我如何从标记文件中指定这个div?

如果${question.questionOptions}小于3,是否要添加一个类"compact"?如果是,我建议的解决方案是添加一个条件,用class="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>

这个解决方案没有经过测试,尽管如果我正确理解你的问题,逻辑就在那里。

最新更新