विशिष्ट डेटा विशेषता jQuery के साथ निकटतम, पिछले तत्व ढूँढना

वोट
46

अब यह पारित कर दिया कुछ घंटों के लिए मुझे परेशान कर दिया गया है।

मैं एक मेज है। उस तालिका में मैं एक विशिष्ट डेटा विशेषता के साथ निकटतम, पिछली तालिका पंक्ति के लिए देख रहा हूँ। मैं सही jQuery sortable के सफल प्रयोग के बाद यह खोज कर रहा हूँ। मैं लगभग सब कुछ कोशिश की है और यह हमेशा गलत बात के साथ आता है।

यहाँ मैं क्या उपयोग कर रहा हूँ है

var newIndex = ui.item.index();
var menuLevel = parseInt($(#menu-table).find([data-menu-nesting=' + newIndex + ']).attr(data-menu-level));
var menuId = $(#menu-table).find([data-menu-nesting=' + newIndex + ']).attr(data-menu-id);

if (menuLevel == 2) {
    var findAboveRowName = $(.menu-table-rows[data-menu-nesting=' + newIndex + ']).prev(.menu-table-rows).data(menu-level,1).attr(data-menu-name);
    alert(findAboveRowName);    
}
if (menuLevel == 3) {
    var findAboveRowName = $(.menu-table-rows[data-menu-nesting=' + newIndex + ']).prev(.menu-table-rows).data(menu-level,2).attr(data-menu-name);
    alert(findAboveRowName);    
}

अनिवार्य रूप से, चर newIndex हल कर दिए जाने के बाद पंक्ति की नई स्थिति हड़पने के लिए माना जाता है, menuLevel कि तालिका पंक्ति के डेटा विशेषता मेनू स्तरीय हड़पने के लिए माना जाता है, और menuId कि तालिका पंक्ति के एक और डेटा विशेषता हथियाने है ।

यह विशेष रूप से तालिका पंक्तियों में निकटतम, पिछले मेनू स्तरीय विशेषता की तलाश में है। तो अगर 2 का एक मेनू स्तरीय विशेषता के साथ एक तालिका पंक्ति में ले जाया जाता है, यह 1 के एक मेनू स्तरीय विशेषता के साथ निकटतम तालिका पंक्ति की तलाश में है।

पूर्ण jQuery sortable स्क्रिप्ट मैं अगर जरूरत उपयोग कर रहा हूँ

$(#sortable).sortable({
                update: function(event, ui) {
                    var serial = $('#sortable').sortable('serialize');
                    var newIndex = ui.item.index();
                    var menuLevel = parseInt($(#menu-table).find([data-menu-nesting=' + newIndex + ']).attr(data-menu-level));
                    var menuId = $(#menu-table).find([data-menu-nesting=' + newIndex + ']).attr(data-menu-id);
                    if (menuLevel == 2) {
                        var findAboveRowName = $(.menu-table-rows[data-menu-nesting=' + newIndex + ']).prev(.menu-table-rows).data(menu-level,1).attr(data-menu-name);
                        alert(findAboveRowName);
                        // $.post(./menu-controller.php, { adjustParent: true, id: menuId, parent: findAboveRowName });
                    }
                    if (menuLevel == 3) {
                        var findAboveRowName = $(.menu-table-rows[data-menu-nesting=' + newIndex + ']).prev(.menu-table-rows).data(menu-level,2).attr(data-menu-name);
                        alert(findAboveRowName);
                        // $.post(./menu-controller.php, { adjustParent: true, id: menuId, parent: findAboveRowName });
                    }
                    $.ajax({
                    url: ./menu-controller.php,
                    type: post,
                    data: serial,
                    success: function() {
                        $(#sortable).load(./menu-manager.php #menu-table, function() {
                            $.get('./menu-admin.js');
                        });
                },
                    error: function(){
                        alert(A problem occurred when moving this menu item. Please try again or contact support.);
                    }
                    });
                },
            handle:'.move-item',
            connectWith:'#menu-table',
            placeholder: highlight,
            containment: parent,
            revert: true,
            tolerance: pointer,
            items: 'tbody > *'
});

JSFIDDLE

29/10/2013 को 06:35
उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
2

.prevकेवल तुरंत पिछले तत्व देता है, यह निकटतम तत्व यह है कि चयनकर्ता से मेल खाता की तलाश में नहीं रखता। का प्रयोग करें .prevAllसभी एक चयनकर्ता मिलान तत्वों को खोजने के लिए, और उसके बाद का उपयोग .first()पहले एक है, जो पास है करने के लिए इसे नीचे संकीर्ण करने के लिए। और अगर आप एक विशिष्ट लिए खोज करना चाहते data-menu-levelविशेषता, आप डाल करने के लिए है कि चयनकर्ता में है; बुला .data("menu-level", 1) सेट विशेषता है, यह इसके लिए खोज नहीं है।

if (menuLevel == 2) {
    var findAboveRowName = $(".menu-table-rows[data-menu-nesting='" + newIndex + "']").prevAll(".menu-table-rows[data-menu-level=1]").first().data("menu-name");
    alert(findAboveRowName);    
}
29/10/2013 को 06:40
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more