4

假设我有这个结构(没有类,没有 ID): - 这是一个定位问题

d[0,1,2] 是 pure divs。没有班级没有身份证。

div( d0) 包装了一个重复的结构,如:

在此处输入图像描述

假设我$(this)是第一个 d1

是否有任何遍历函数,方法,解决方案可以获得其他2 d1?(或全部d1's。没关系..)

我会用文字来赞美它:

我是$(this)=d1。我有一个父级(即d2,可以更多......这仅适用于我的示例),它有一个父级(d3),因此,我有 2 个更精确的元素,例如我。

我怎样才能得到它们?JSBIN

编辑

也许我不清楚,但我不必知道结构。我只是有$(this),它应该自己找到其他相对于d0(与其位置相同)的双胞胎

所以它应该是这样的:

function getLikeMyself(objWhichIsThis , contextDivElement)
{
}

execute : getLikeMyself(theDivWhishIsThis, divElemtnWhichIs_d0)
4

3 回答 3

5

这是我的新尝试,该.me()方法将返回当前元素的选择器,直到body.

$.fn.me = function(){
  return this.first().parentsUntil("body").andSelf().map(function(){
    return this.tagName;
  }).get().join(">");
};

用法:

var selector = $(this).me();
var $twins = $(selector);

看这里。


接受根元素作为参数的替代版本:

$.fn.me = function(root){
  return this.first().parentsUntil(root).andSelf().map(function(){
    return this.tagName;
  }).get().join(">");
};

用法:

var selector = $(this).me("#root");
var $twins = $(selector, "#root");

看这里。


第三个版本保持根元素下最顶层元素的后代的相对位置。例如,它将返回DIV>DIV:nth-child(1)>SPAN:nth-child(2)而不是通用DIV>DIV>SPAN选择器。

$.fn.me = function(root){
  return this.first().parentsUntil(root).andSelf().map(function(){
    var eq = i ? ":nth-child(" + ($(this).index() + 1) + ")" : "";
    return this.tagName + eq;
  }).get().join(">");
};

用法:

var selector = $(this).me("#root");
var $twins = $(selector, "#root");
于 2013-02-24T11:49:00.197 回答
1

您可以使用在下行过程中建立的路径遍历每个父节点并下降到它们相应的兄弟节点:

var chain = [$('#imthis').prop('nodeName')];

$('#imthis')
  .parentsUntil('body')
  .each(function() {
    // i'm a parent
    $(this).siblings()
      .find(chain.join('>'))
    .each(function() {
      alert(this.textContent);
    });
    chain.unshift(this.nodeName);
  });

演示

于 2013-02-24T11:48:44.667 回答
1

您可以使用递归函数来“冒泡”DOM,直到到达 body 元素,然后反转该树并将其用作选择器。有点像:

function getChain(el){

    var parents = arguments[1] || [el.nodeName.toLowerCase()];

    if (el.parentNode.nodeName != 'BODY'){

        parents.push(el.parentNode.nodeName.toLowerCase());
        el = el.parentNode;

        return getChain(el, parents);

    } else {

        return parents.reverse().join('>');

    }

}

一个演示小提琴

于 2013-02-24T11:57:34.620 回答