【问题标题】:jQuery Higlight items that are more than one in uljQuery 突出显示 ul 中不止一个的项目
【发布时间】:2013-11-12 09:55:44
【问题描述】:

我正在尝试使用 jQuery 突出显示列表中多个不同颜色的项目。是否可以轻松实现以下目标?

例如。取下面的ul

<ul id="inul">
    <li id="s0" class="list">
        <span id="ip0">127.0.0.1</span>
        <span id="ua0">SonyEricssonK800iv/R1KG Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1</span>
    </li>
    <li id="s1" class="list">
        <span id="ip1">127.0.0.1</span>
        <span id="ua1">Nokia3120classic/2.0 (09.41) Profile/MIDP-2.1 Configuration/CLDC-1.1 nokia3120classic/UC Browser7.6.1.82/69/352 UNTRUSTED/1.0</span>
    </li>
    <li id="s2" class="list">
        <span id="ip2">127.0.0.1</span>
        <span id="ua2">SonyEricssonW580i/R8BE Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1</span>
    </li>
    <li id="s3" class="list">
        <span id="ip3">127.0.0.1</span>
        <span id="ua3">SonyEricssonK800iv/R1KG Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1</span>
    </li>
    <li id="s4" class="list">
        <span id="ip4">127.0.0.1</span>
        <span id="ua4">Nokia3120classic/2.0 (09.41) Profile/MIDP-2.1 Configuration/CLDC-1.1 nokia3120classic/UC Browser7.6.1.82/69/352 UNTRUSTED/1.0</span>
    </li>
    <li id="s5" class="list">
        <span id="ip5">127.0.0.2</span>
        <span id="ua5">SonyEricssonW580i/R8BE Browser/NetFront/3.3 Profile/MIDP-2.0      Configuration/CLDC-1.1</span>
    </li>
</ul>

每个浏览器有两个用户代理和4个相同的ip(127.0.0.1)和1个127.0.0.2。

我希望实现的是相同的跨度将用相同的颜色着色,同时为每个相同的集合分配不同的颜色。

为了清楚起见,最终结果应该如下图所示

更新 在 Wskid 的帮助下,我已经实现了我想要的。查看更新http://pastebin.ca/2058058http://jsfiddle.net/mUGVR/15/ 的工作版本

【问题讨论】:

    标签: javascript jquery highlighting


    【解决方案1】:

    以下内容非常高效和 hacky,但它可能会让您走上正确的道路,即存储类似哈希的地图并保持计数以添加所需的样式:

    工作小提琴http://jsfiddle.net/mUGVR/.

    var ipList={};
    var ipCount=0;
    var userList={};
    var userCount=0;
    
    $('li.list').each(function(i){
       var spans = $(this).children();
        spans[0] = $(spans[0]);
        spans[1] = $(spans[1]);
    
        if(ipList[spans[0].text()]!=null)
        {
            spans[0].addClass('ip'+ipList[spans[0].text()]);
        }
        else 
        {
            ipList[spans[0].text()] = ipCount;
            spans[0].addClass('ip'+ipCount);
            ipCount++;
        }
    
        if(userList[spans[1].text()]!=null)
        {
            spans[1].addClass('user'+userList[spans[1].text()]);
        }
        else 
        {
            userList[spans[1].text()] = userCount;
            spans[1].addClass('user'+userCount);
            userCount++;
        }
    });
    

    使用 css:

    .ip0 {background:yellow;}
    .user0{background:cyan;}
    .user1{background:green;}
    .user2{background:red;}
    

    【讨论】:

    • 叹息,总是落后一两分钟。 Gary 的回答几乎一模一样,这只是添加类而不是直接的 css 样式。
    • 很好,我什至没想过要在其中使用类,因为可能有多少样式/颜色。
    • 谢谢,如果您不介意我选择 PIA :) 即使只有一个 ip 或用户代理,您的代码也会开始突出显示。尝试将第一个 ip 更改为小提琴上的唯一 IP,以了解我的意思。唯一 ip 突出显示。是否有可能做到这一点,如果 ip 或用户代理没有被多次列出,它就不会被更改?
    • 在处理完您的示例后,我设法实现了我想要的 Ip 列表。看看jsfiddle.net/mUGVR/12
    • 非常好!我想避免重复的 $.each() 调用,我确信有一种方法,但你的方法可以工作并且运行得相当快(复制到 100 个左右的 ip,它在 ie7 上运行了 1.8 秒)。
    【解决方案2】:

    像这样? 小提琴: http://jsfiddle.net/8A5dY/1

    // highlights ips
    $('li span:first-child').filter(function() {
        return ($(this).text() == '127.0.0.1');
    }).css('background', 'yellow');
    
    var colorMap = [];
    var currentColor = 0;
    
    $('li span:nth-child(2)').each(function() {
        var text = $(this).text();
        var color = colorMap[text] ||
                    ['lightblue', 'red', 'blue', 'green'][currentColor++];
    
        colorMap[text] = color;
    
        $(this).css('background', color);
    });
    

    【讨论】:

    • 像这样,但是,ip 或用户代理不是静态的。列出它可能有不同的 ips 和用户代理
    • 什么意思?你说有2个不同的IP。对于用户代理,只需继续扩展您的颜色数组或获取颜色十六进制代码增量器,以便每种颜色保持唯一。
    • return ($(this).text() == '127.0.0.1'); 127.0.0.1 只是一个示例,数据从 ips 和用户代理数据库加载
    • 您希望它们以相同的方式突出显示吗?为什么不把 .each 函数也用于 ips。作为旁注,该站点用于帮助编写代码,您能否证明您正在尝试更改代码以适应您的需要。这不是那种我们用勺子喂所有东西的网站;)
    • 我知道,你是对的。我通常不会问,除非我真的很绝望并感谢帮助。
    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多