我有一个 iframe,通过点击它的任何内容,css 类被应用在它上面(比如“selected”)。之后
单击下一个按钮时,它应该将此类应用于包含文本的下一个元素
并返回文本。遍历应该是基于文本节点的。虽然我确实试图做一些非常丑陋的事情,但我想必须有一些简单的解决方案可用。
这是我的代码:
$(function(){
$('#next').click(function(){
var current_segment =$('#my_iframe').contents().find(".highlight");
// if current segment has children
if($(current_segment).children().not('.traversed_already').length > 0){
$(current_segment).children().not('.traversed_already').first().addClass('highlight');
$(current_segment).removeClass('highlight');
// add class to stop repitative traversing
$(current_segment).addClass('traversed_already');
// return false;
// if has siblings and no children
}else if($(current_segment).siblings().not('.traversed_already').length > 0
&& $(current_segment).children().not('.traversed_already').length <= 0){
$(current_segment).siblings().not('.traversed_already').first().addClass('highlight');
$(current_segment).removeClass('highlight');
// add class to stop repitative traversing
$(current_segment).addClass('traversed_already');
// return false;
// if no siblings and no children
}else if($(current_segment).siblings().not('.traversed_already').length == 0 &&
$(current_segment).children().not('.traversed_already').length == 0){
// check the very first parent if traversed check its siblings
var parent_segment = $(current_segment).parent().first();
// if parent is already traversed already
if($(parent_segment).hasClass('traversed_already')){
// if parent is traversed but parent has sibling that is untraversed
if($(parent_segment).siblings().not('.traversed_already').length > 0){
$(parent_segment).siblings().not('.traversed_already').first().addClass('highlight');
$(parent_segment).removeClass('highlight');
// add class to stop repitative traversing
$(parent_segment).addClass('traversed_already');
// return false;
// if no untraversed sibling then search for parent(s)
}else{
// Look for the parent in Dom tree which is not traversed
$(parent_segment).parents().not('.traversed_already').first().addClass('highlight');
$(parent_segment).removeClass('highlight');
// add class to stop repitative traversing
$(parent_segment).addClass('traversed_already');
// return false;
} // end of if traversed parent has siblings(untraversed).
// if parent is not traversed
} else {
$(parent_segment).addClass('highlight');
$(current_segment).removeClass('highlight');
// add class to stop repitative traversing
$(current_segment).addClass('traversed_already');
} // end of if parent is already traversed or not
// return false;
} // end of else if no siblings and no parents
此代码的问题是:
它只是通过首先看到孩子然后是兄弟姐妹然后是父母兄弟姐妹来遍历下一个元素,但是当出现父母>父母>父母兄弟姐妹时它会失败。
注意:我相信这可以通过 DOM 遍历很容易地完成,但我无法找到正确的解决方案。