说我有以下标记:
<div>
<h3><a href="">link I want to select</a></h3>
<div>
<h3><a href="">link</a></h3>
</div>
<h3><a href="">link I want to select</a></h3>
<h3><a href="">link I want to select</a></h3>
<a href="">link</a>
</div>
假设以下......
...是否有一种聪明的方法可以选择'第一个锚标记,以及嵌套在同一级别的所有其他锚标记',以便它返回第1,第3和第4个链接?
更糟糕的情况是,我们需要进入并且只是在我们的HTML中添加特定的类,但如果可以通过纯选择器完成,那就太棒了。
答案 0 :(得分:9)
不是纯粹的选择器,但是如何:
var depth = $('#myanchor').parents().length;
var all_at_depth = $("a").filter( function() { $(this).parents().length == depth; } );
如果有帮助,您可以使用parentsUntil()来获取#myanchor与特定父级之间的距离。
答案 1 :(得分:1)
结帐siblings()和:first。
答案 2 :(得分:1)
$('a:first').parent().siblings().children('a');
答案 3 :(得分:1)
this怎么样?
$(function () {
// I take it you need some way to get the reference element.
var referenceElement = $('a').eq(0);
// Build the selector by making as many child selectors as our nesting level.
var selector = '';
var currentElement = referenceElement;
while (currentElement[0].parentNode !== document.body) {
selector = (selector ? '* > ' + selector : '*');
window.console && window.console.debug(currentElement, '!==', document.body, ' => ', currentElement.parent(), '; selector = ', selector);
currentElement = currentElement.parent();
}
// Replace the tagName stuff with '*' if you want any element to match.
selector = 'body > ' + selector + ' > ' + referenceElement[0].tagName;
window.console && window.console.log(selector, ' => ', $(selector));
});
答案 4 :(得分:0)
我写了这个jQuery函数,应该可以完成这项工作。
示例:https://jsfiddle.net/xvcby8kL/2/
$.extend({
/**
* Returns set of same elements on the same DOM depth
*
* @param {string} selector of the referencing element
* @param [{string} parent, body by default]
* @returns {jQuery} set of elements
*/
getSameLevelElements: function (selector, parent) {
if (typeof parent === 'undefined') {
parent = 'body';
}
var el = $(selector).first();
if (el.length < 1) {
return $();
}
var depth = el.parents(parent + ' *').length;
for (var i = 0; i < depth; i++) {
parent += ' > *';
}
selector = parent + ' > ' + el.get(0).tagName.toLowerCase();
return $(selector);
}
});
答案 5 :(得分:0)
使用属性Class
<div>
<h3 class="select" ><a href="">link I want to select</a></h3>
<div>
<h3><a href="">link</a></h3>
</div>
<h3 class="select" ><a href="">link I want to select</a></h3>
<h3 class="select" ><a href="">link I want to select</a></h3>
<a href="">link</a>
</div>
Jquery的:
$(".select").each(function(){
//functionality
});
答案 6 :(得分:-1)
如果要选择h3下的所有链接:
var $links = $('h3 a');
编辑: 对不起,我没有看得那么明显。也许你可以尝试以下(注意这没有测试):
var $links = $(div > * > a);