【问题标题】:Need logical solution for uncountable loop dillema需要解决不可数循环困境的逻辑解决方案
【发布时间】:2014-07-26 03:48:55
【问题描述】:

假设我在 java 中有这种循环(不是确切的代码,也不是真正有效的代码,只是为了给你一个大致的情况):

print "<ul>";
while (res = fetch(database)) {
    print ("<li>" + res.col['data'] + "</li>");
}
print "</ul>";

我有这个 CSS,它使列表中的最后一项变为红色。

ul li:last-child { color: red; }

这在大多数浏览器上都可以正常工作。问题是:

  • 我也需要在 IE8 上进行这项工作。
  • IE8 不支持 last-child。
  • 我无法测试“while”的当前迭代是否正在进入最后一个迭代。或者说,我无法检查循环何时结束。这不是一个普通的循环,但我们就这么说吧。所以我不能给最后一个&lt;li&gt; 上课,比如class="lastchild"
  • 我也尝试过使用 javascript 和 jquery,但我认为两者都无法选择“last-child”,因为它们取决于 css 进行选择。

在这种情况下最好的方法是什么?谢谢。

【问题讨论】:

  • 在发布此问题之前,我正在查看该问题。但这个问题与我的不同之处在于它只有两列。通过添加一个类,这是一个简单的解决方案。我在该问题的一个解决方案中读到了这一点。我的问题是一个不可数的循环,这真的是不可数的。无法测试和检测循环何时结束。
  • selectivizr.com 从未测试过,但您应该研究一下:js emulation for pseudo selectors in explorer
  • @LorenzoBoccaccia 看起来是一个可行的解决方案。我会试着调查一下。 :) 谢谢。

标签: java css list while-loop css-selectors


【解决方案1】:

假设问题出在Java中,我想知道为什么没有办法检测到最后一条记录。可能您需要首先重新考虑您的数据结构,将数据填充到 Map 或 List 中,然后进行迭代。

而且,如果这不可能,您可以选择 StringBuilder 实例,首先通过循环构建整个 String html 标签,然后用所需样式替换最后一个 li 元素,然后将其放入 print 语句用于渲染。

即使您尝试使用 javascript 进行编码,上述几点也有效,只需稍作改动。

【讨论】:

  • 因为它实际上是 Enfinity,它是 Java 之上的一个框架。获取数据库并将其打印到自定义标签,这使事情变得复杂,因为我无法检查循环中的数据。甚至从循环和循环本身获取数据也必须使用自定义标签来完成。在我的操作范围内,唯一可以操作的是
  • ,因为这就是我在代码上实际打印的内容。其他内容由其他人开发的自定义标签中的任何代码打印。
  • 好吧...对不起..没想到。不管怎么说,多谢拉。我认为 StanislavL 的解决方案应该有所帮助。如果没有,请尝试基于 Id 的 jquery 元素选择器,但与 StanislavL 的解决方案相比,这将有点复杂。
  • 没关系哈哈。是的,stanislav 的解决方案有效。我只需要一个合乎逻辑的解决方案。 :) 感谢您的回复。
  • 【解决方案2】:
    print "<ul>";
    String liText=null;
    while (res = fetch(database)) {
        if (liText!=null) {
            print ("<li>" + liText + "</li>");
        }
        liText=res.col['data'];
    }
    
    if (liText!=null) {
        print ("<li style='the last element style'>" + liText + "</li>");
    }
    print "</ul>";
    

    将最后一行的添加移出 while 并在那里应用所需的样式

    【讨论】:

    • 我认为这可行。我先试试看。为什么我从来没有这样想过...谢谢。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签