3

得到了这段代码(正在处理它):

uniqueHead = {};
$("div.hleft h3").each(function () {
    var thiz = $(this)
    var thisValq = thiz.text();
    var thisVal = thisValq.trim().toLowerCase().toString();
    if(!(thisVal in uniqueHead) ) {
    uniqueHead[thisVal] = "";
    }
    else {
    $(this).parent().parent().css('border-color','red')
    }
});

该代码适用于可以拆分组的搜索结果的搜索结果列表,即与“结果 2”同名的“结果 1”可以位于位置 1 和 12。

我需要做的是将所有具有相同文本的 h3 分组,然后正确排序并应用不同的类,以便我只在每个组中显示结果 1(稍后可以创建一个显示相似结果的触发器)。

想象一下这样的代码:

<div class="blist">
    <div class="hleft">
    <h3>Three</h3>
    </div>
</div>

<div class="blist">
    <div class="hleft">
    <h3>One</h3>
    </div>
</div>

<div class="blist">
    <div class="hleft">
    <h3>Three</h3>
    </div>
</div>

<div class="blist">
    <div class="hleft">
    <h3>Two</h3>
    </div>
</div>

<div class="blist">
    <div class="hleft">
    <h3>One</h3>
    </div>
</div>

<div class="blist">
    <div class="hleft">
    <h3>Three</h3>
    </div>
</div>

<div class="blist">
    <div class="hleft">
    <h3>Two</h3>
    </div>
</div>

<div class="blist">
    <div class="hleft">
    <h3>Three</h3>
    </div>
</div>

上面不是“真正的”代码,但对于 JS 部分,它仍然可以工作。:) 我对后端没有任何控制权,因此无法更改结果的显示方式,因此用于订购等的 JS 解决方案。

4

2 回答 2

1

为了处理分组部分,我认为您应该存储与您找到的每个名称的第一个实例相对应的 DOM 元素(目前,您只是在编写一个空字符串)。然后,在您当前将边框设置为红色的地方,改为从 DOM 中删除重复元素并将其插入到原始匹配元素之后。然后,您可以向隐藏它的每个重复元素添加一个类。

还没有测试过这个,但是像这样的东西应该可以解决问题。

uniqueHead = {};
$("div.hleft h3").each(function () {
    var thiz = $(this);
    var thisValq = thiz.text();
    var thisVal = thisValq.trim().toLowerCase().toString();
    if(!(thisVal in uniqueHead) ) {
        uniqueHead[thisVal] = thiz;
    }
    else {
        // remove the element from the dom and place it after the original one
        var originalElement = uniqueHead[thisVal];
        originalElement.after($(this).remove().addClass("hiddenDuplicate"));
    }
});

稍后如何显示重复项取决于您。您可以将每组重复项包装在父 div 中,然后当单击该 div 中的按钮时,显示所有子元素。

于 2012-10-24T16:49:05.897 回答
0

这类作品。虽然有点难看。:)

uniqueHead = {};
$("div.hleft h3").each(function () {
    var thiz = $(this);
    var thisValq = thiz.text();
    var thisVal = thisValq.trim().toLowerCase().toString();
    if(!(thisVal in uniqueHead) ) {
        uniqueHead[thisVal] = thiz;
    }
    else {
        // remove the element from the dom and place it after the original one
        var originalElement = uniqueHead[thisVal];
        originalElement.parent().parent().after($(this).parent().parent().addClass("hiddenDuplicate"));
    }
});​

jsFiddle 链接:http: //jsfiddle.net/VbePd/3/

这样做的一个问题是它颠倒了顺序,因为 after() 不知道已经添加的内容。所以 1,2,3,4 变成 4,3,2,1。

于 2012-10-25T10:32:48.770 回答