Я в основном использую плагин jquery treeview http://bassistance.de/jquery-plugins/jquery-plugin-treeview/, который не имеет функции поиска - я решил это, но как только я найду элемент, я также должен открыть весь древовидный вид - и что я могу сделать, только пересекая дерево. Итак, следующая проблема:
Допустим, у меня есть следующий UL
<ul id="mainlist" class="level1">
<li>
<div class="hitarea a1"></div>
<div class="b1"></div>
</li>
<li>
<div class="hitarea a2"></div>
<div class="b1"></div>
</li>
<li>
<div class="hitarea a3"></div>
<div class="b1"></div>
<ul class="level3">
<li>
<div class="hitarea a4"></div>
<div class="b1"></div>
<ul class="level2">
<li>
<div class="hitarea a5"></div>
<div class="b1"></div>
</li>
<li>
<div class="hitarea a6"></div>
<div class="b1"></div>
</li>
<li>
<div class="hitarea a7"></div>
<div class="b1"></div>
</li>
</ul>
</li>
<li>
<div class="hitarea a8"></div>
<div class="b1"></div>
</li>
<li>
<div class="hitarea a9"></div>
<div class="b1"></div>
</li>
</ul>
</li>
</ul>
Я хочу следующее:
если я нажму на div с классом "hitarea a5", я хочу получить все предыдущие элементы (div) с классом "hitarea" - чтобы я мог вручную применить.click(), чтобы открыть их. Это будет следующее:
При следующем я получаю только первый предыдущий (hitarea a4):
$("#mainlist .a5").parent().prev('.hitarea')
Но я хочу, чтобы все предыдущие a4 и a3.... до тех пор, пока не будет достигнут корень UL.
prevAll тоже не помогает.
========================== Решение ======================= =================
Для всех, кто ищет функциональность поиска в плагине древовидного jquery (http://bassistance.de/jquery-plugins/jquery-plugin-treeview/), здесь следующий вклад от меня к сообществу с открытым исходным кодом (@arun-p- johny). Возможно, они захотят включить это в код так или иначе:
<style>
#search-bottom-div {
z-index: 999;
position: absolute;
background: #FFF;
padding: 5px;
width: 220px;
border: 1px solid #CCC;
left: 125;
top: 27;
min-height: 50px;
display: none;
color: #000;
}
</style>
<div style="float:left;">
<input placeholder="Suchen" id="searchtreeitem" name="searchtreeitem"/>
</div>
<div id="search-bottom-div">
<div id="search-bottom-div-content"></div>
<div id="search-bottom-div-close" style="text-align:right;text-decoration:underline;cursor:pointer;"><br/><br/>Close</div>
</div>
$('#searchtreeitem').keyup(function(e) {
textval = $(this).val();
$("#search-bottom-div-content").empty();
$("#search-bottom-div").show();
foundItems = $("#mainList").find("span:Contains("+textval+")");
$.each(foundItems, function(index, value) {
$("#search-bottom-div-content").append($(value).clone()).append("<br/>");
});
});
$("#search-bottom-div-content span").live( "click", function() {
foundClass = $(this).attr("class");
$("#mainList ."+foundClass).click();
var $this = $("#mainList ."+foundClass);
$lis = $this.parentsUntil('#mainList', 'li');
$hitareas = $lis.children('.hitarea').not(this);
$.each($hitareas, function(index, value) {
if($(value).next('.orgeinhItem').find('.toporg').length == 0){
$(value).click();
}
});
$("#searchtreeitem").val("");
$("#search-bottom-div").hide();
});
$("#search-bottom-div-close").live( "click", function() {
$("#searchtreeitem").val("");
$("#search-bottom-div").hide();
});
jQuery.expr[':'].Contains = function(a, i, m) {
return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};
Пытаться
jQuery(function () {
$('.hitarea').click(function () {
var $this = $(this),
//find all li element between the clicked hitarea and the root ul
$lis = $this.parentsUntil('#mainlist', 'li'),
//find all hitarea elements in those li elements excludint the clicked hitaread
$hitareas = $lis.children('.hitarea').not(this);
//create an array which contains the class attribute values of hitareas
var classes = $hitareas.map(function () {
return this.className
}).get();
console.log(classes)
})
})
Демо: скрипка