Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Jquery根据div中的值进行排序_Jquery_Sorting_Xhtml - Fatal编程技术网

使用Jquery根据div中的值进行排序

使用Jquery根据div中的值进行排序,jquery,sorting,xhtml,Jquery,Sorting,Xhtml,因此,我正在编写一个程序,需要根据div的内容进行排序。我想要的是两件事: 该程序按默认情况下隐藏的孙子div的项进行排序。“权重值”是我希望排序的值(如果它低于某个点,则将其移动到另一个表) 对项目进行排序时,其中包含某种重写的项目将被排序到另一个“不太可能被调用”的表中 下面是我目前的代码: <div id="likelyToBeCalled"> <div class="likelyOddHeader" id="Test1"> <div

因此,我正在编写一个程序,需要根据div的内容进行排序。我想要的是两件事:

  • 该程序按默认情况下隐藏的孙子div的项进行排序。“权重值”是我希望排序的值(如果它低于某个点,则将其移动到另一个表)

  • 对项目进行排序时,其中包含某种重写的项目将被排序到另一个“不太可能被调用”的表中

  • 下面是我目前的代码:

    <div id="likelyToBeCalled">
        <div class="likelyOddHeader" id="Test1">
            <div class="likelyOddA">Test1</div>
            <div class="likelyOddB"><img src="image002.png"/></div>
            <div class="timeZone">West</div>
        </div>
        <div class="hidden">
                <div class="weight">Weight:56</div>
                <div class="values">Value1: Value Here.  Value 2: Value Here. Value 3: Value Here.  Value 4:  Value here.  Value5: Value here. <br />
                                                DbValue1: 123, DbValue2: 1234, DbValue3, 123456 DbValue4: 123, DbValue5: 1234, DbValue6, 123456</div>
                <div class="overrides">Overrides: 0</div>
        </div>
    ...More divs / values here
    
    <div id="unlikelyToBeCalled">
        <div class="likelyOddHeader" name="Test3">
            <div class="likelyOddA">Test3</div>
            <div class="likelyOddB"><img src="image002.png"/></div>
            <div class="timeZone">West</div>
        </div>
    ...More divs / values here
    
    
    测试1
    西部
    体重:56
    Value1:这里的值。值2:这里的值。值3:这里的值。值4:这里的值。值5:这里的值
    DbValue1:123、DbValue2:1234、DbValue3、123456 DbValue4:123、DbValue5:1234、DbValue6、123456 覆盖:0 …此处有更多div/值 测试3 西部 …此处有更多div/值
    到目前为止,我一直试图用jQuery来实现这一点,但进展并不顺利。我不知道如何处理“如果”逻辑或如何处理排序,我仍在努力从一个区域移动到另一个区域

    我一直在尝试的代码包含一个提交按钮:

    <script type="text/javascript">
    
    $(document).ready(function() {
    $("input.buttonDhide").click(function(){ $(".row").find(".left").hide("slow"); });
    )};
    )};
    </script>
    
    
    $(文档).ready(函数(){
    $(.input.buttonDhide”)。单击(函数(){$(.row”)。查找(.left”).hide(“slow”);});
    )};
    )};
    
    编辑:注意,上面的代码实际上只是为了看看我是否可以这样选择一个元素,但它根本不起作用


    编辑:将标记更改为使用类,因为我错误地复制了id,现在都设置在那里了。

    对我来说,这似乎是一个非常适合的选项。您可以直接对绑定到html结构的javascript数组(ko.observatarray)进行排序,而不是使用jQuery来尝试通过类或数据属性来查找某些元素进行排序

    展示一种你可以做到这一点的方法。我不确定是否要检查权重或覆盖变量,所以我只使用了(if overrides==1)。你可以很容易地改变它,即(如果重量<10)。我强烈建议您阅读一些Knockout.js教程。在我看来,这是一场非常激烈的比赛…哥拉米

    为了以防万一,我将在这里包含代码。请记住,这可能也可能需要清理一下:

    HTML:


    您的html无效,不允许重复的
    id
    a,请使用
    class
    。是否有原因不使用表(看起来像是表格数据),然后您可以使用jQuery排序:我使用div代替表,基本上做了相同的事情:。左{display:table cell;}。右{display:table cell;}。中{显示:表单元格;}行{显示:表行;高度:45 px;边距左:Auto.LoopeOrth:Auto;;您复制IDS,这是无效的HTML。我会考虑将这些数据添加到某种JavaScript数组中,而不是将其隐藏在标记中。
    <div data-bind="with: likelyToBeCalled">
        <div data-bind="with: likelyOddHeader">
            <div data-bind="text: likelyOddA"></div>
            <div><img data-bind="attr: { src: likelyOddB }" alt="" /></div>
            <div data-bind="text: timeZone"></div>
        </div>
        <div data-bind="foreach: hidden">
            <div data-bind="text: 'Weight: ' + weight"></div>
            <div data-bind="text: 'Values: ' + values"></div>
            <div data-bind="text: 'Overrides: ' + overrides"></div>
        </div>
    </div>
    
    <p>
        <button data-bind="click: buttonClick">Sort likely to be called</button>
    </p>
    
    <div data-bind="with: unlikelyToBeCalled">
        <div data-bind="with: likelyOddHeader">
            <div data-bind="text: likelyOddA"></div>
            <div><img data-bind="attr: { src: likelyOddB }" alt="" /></div>
            <div data-bind="text: timeZone"></div>
        </div>
        <div data-bind="foreach: hidden">
            <div data-bind="text: 'Weight: ' + weight"></div>
            <div data-bind="text: 'Values: ' + values"></div>
            <div data-bind="text: 'Overrides: ' + overrides"></div>
        </div>
    </div>
    
    var viewModel = {
        likelyToBeCalled: {
            likelyOddHeader: {
                likelyOddA: "Test1",
                likelyOddB: "image001.png",
                timeZone: "West"
            },
            hidden: ko.observableArray([
                { weight: 56, values: "your values string 1", overrides: 1 },
                { weight: 20, values: "your values string 2", overrides: 0 },
                { weight: 12, values: "your values string 3", overrides: 0 },
                { weight: 16, values: "your values string 4", overrides: 1 }
            ])
        },
        unlikelyToBeCalled: {
            likelyOddHeader: {
                likelyOddA: "Test2",
                likelyOddB: "image002.png",
                timeZone: "East"
            },
            hidden: ko.observableArray([
                { weight: 1, values: "your values string 4", overrides: 1 }
            ])
        },
        buttonClick: function () {
            var likely = viewModel.likelyToBeCalled;
            var unlikely = viewModel.unlikelyToBeCalled;
    
            for (var i in likely.hidden()) {
                if (likely.hidden()[i].overrides == 1) {
                    unlikely.hidden.push(likely.hidden()[i]);
                    likely.hidden.remove(likely.hidden()[i]);
                }
            }
    
            likely.hidden.sort(function (a, b) {
                return a.weight > b.weight ? 1 : -1;
            });
        }
    };
    
    ko.applyBindings(viewModel);