2012-06-05 3 views
1

Пожалуйста, несите меня. Я стараюсь объяснить, что мне нужно, но мне, вероятно, понадобится несколько обновлений для моего OP.Использовать jQuery для получения позиции/номера иерархии выбранного элемента?

Я хочу получить позицию выбранного элемента в иерархии. Например, , если у меня есть в общей сложности 4 гиперссылки во всем html-документе, и я навешиваю на третью ссылку, я хочу «html> body> a: eq (2)» - 2, обозначающий третий элемент гиперссылки.

И нет, index() не делает трюк.

Я пробовал this code с небольшой настройкой и получаю следующее: «html> body> a», но не могу найти функцию для возврата позиции.

Как получить позицию выбранного элемента в иерархии похожих элементов? (Я даже не знаю, если это право терминологии.) Нужно ли мне пройти через DOM и выполнить ручную спичку, если х == у своего рода вещь

<a href=#">link1</a> 
<a href=#">link2</a> 
<a href=#">link3</a> 
<a href=#">link4</a> 

Я буду использовать этот код для всех видов HTML-элементов , а не только гиперссылки.

+0

Я добавил ответ, но я думаю, что это зависит от того, что вы конкретно пытаетесь сделать с индексом. Можете ли вы привести несколько примеров того, что вы будете делать, потому что это поможет вам получить лучший пример. – lucuma

ответ

1

Если у Вас есть данный элемент и хотите знать, что энной ссылка находится в документе, вы можете сделать это так:

function whichLink(el) { 
    return $("a").index(el); 
} 

Эта форма .index(el) возвращает тот элемент в объекте jQuery, который соответствует переданному элементу. Он ищет объект jQuery для поиска соответствующего элемента. Поскольку объект jQuery сортирует элементы в порядке документа, это даст вам позицию в документе данной ссылки.

Если вы пытаетесь сделать что-то другое, пожалуйста, уточните свой вопрос.

+0

отлично, это то, что мне нужно, +1 для однострочного – unangelic

0

Обычно вы можете сделать это внутри каждый цикл:

$('a').each(function(i) { 
    // i has the index so we can do something with it 
    var index = i; 
    $(this).click(function() { 
    $(this).attr('href', index); // make the href = i for instance 
    }); 
}); 
0

Поскольку вы хотите действия с зависанием, я бы предложил несколько иной подход. Вместо того, чтобы находить все элементы для получения индекса при каждом наведении (который может происходить довольно часто), я бы установил индекс, когда документ сначала загрузится, чтобы вы могли легко получить его при срабатывании события.

Что-то вроде:

$('a').each(function(i, el){    
    $(this).data('index', i); 
    $(this).hover(function(){ 
     var hoveredIndex = $(this).data('index'); 
     // Do you action with the index 
    }); 
}); 

Если у вас нет большого знака вверх или зависания не происходит часто, это может быть слишком много. Также, если у вас есть контейнер вокруг элементов, селектор/события могут быть пересмотрены.

Смежные вопросы