2011-12-18 4 views
2

Я пытаюсь выбрать элемент справа перед текущим элементом. Текущий элемент - это гиперссылка, которая при нажатии добавляет некоторый текст в «цель», которая находится непосредственно перед гиперссылкой.jQuery-селектор, который нацелен на элемент управления прямо перед текущим элементом

Эти элементы управления находятся в asp: повторителе, поэтому одна и та же последовательность повторяется снова и снова, и каждая гиперссылка должна быть способна идентифицировать элемент чуть выше него.

вот мой скриншот DOM

enter image description here

Мне просто нужно знать, как выбрать элемент этот путь! спасибо

ответ

3

Вы можете использовать либо previousSibling:

var as = document.getElementsByTagName('a'); 

for (var i=0, len=as.length;i<len;i++){ 
    as[i].onclick = function(e){ 
     e.preventDefault(); 
     var previous; 
     if (this.previousSibling.nodeName == '#text') { 
      // the previousSibling was a textnode, comprising of the whitespace between elements 
      previous = this.previousSibling.previousSibling; 
     } 
     else { 
      previous = this.previousSibling; 
     } 
     previous.style.backgroundColor = 'yellow'; 
    }; 
} 

JS Fiddle demo.

Или использовать JQuery в prev():

$('a').click(
    function(e){ 
     e.preventDefault(); 
     $(this).prev('div').css('background-color','yellow'); 
    }); 

JS Fiddle demo.

Ссылки:

+0

спасибо, это трюк! –

+0

Добро пожаловать! Рад помочь! =) ... хотя я думаю, что 'if' в первом примере кода может/должно быть упрощено каким-то образом ... = / –

2

Может быть, это ?: http://api.jquery.com/next/

EDIT: http://api.jquery.com/prev/

+0

то будет «сразу после» селектор элемента , Мне нужен «предыдущий» селектор. :) –

+2

Так уточните ваш вопрос, пожалуйста. Он должен читать * выбрать элемент справа ** перед ** текущим *, а не ** после **, правильно? Я получил то же самое, явно ложное впечатление, как Райан Касас с 1-го чтения. – hasienda

+0

Хорошо, прочитайте мой отредактированный ответ;) –

1

Я думаю, что prev - это решение, которое вы хотите. Просто, чтобы ответить на ваш вопрос, если вы хотите селектор для этого, вы можете создать его самостоятельно, как это:

$.expr[':'].prev = function(o) { 
    return $(o).prev(); 
}; 

И использовать его как:

$('a:prev').someMethod(); // which works exactly like $('a').prev().someMethod 
Смежные вопросы