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。当我不知道 ID(并且希望避免设置它)时,如何从标记文件中指定此div?

4

1 回答 1

1

${question.questionOptions}如果小于三个,你想添加一个“紧凑”类吗?如果是,我建议的解决方案是添加一个条件,将 div 设置为 class="singleChoice compact"。

<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>

此解决方案未经测试,但如果我正确理解您的问题,逻辑就在那里。

于 2012-10-16T15:34:05.623 回答