JQuery: выберите предыдущий брат текстового узла
Допустим, у нас есть следующий HTML-код:
<div>
Select Gender:
<input type="radio" />
Male
<input type="radio" />
Female
</div>
Моя цель состоит в том, чтобы проверить мужской переключатель (первый). Тем не менее, я не знаю, будет ли эта кнопка всегда первой из двух кнопок-переключателей, единственное, что точно, это то, что я хочу проверить переключатель перед "мужским" текстом.
Вот как я это сделал:
$('div')
.contents()
.filter(function() {
return (((this.textContent || this.innerText || $(this).text() || '').search(new RegExp(labels[i], "ig")) >= 0) && (this.nodeType === 3));
})
.prev('input[type=radio]')
.attr('checked', 'checked');
Но это не работает. Быстрая отладка показывает, что текстовый узел выбран правильно, но затем функция.prev() ничего не возвращает. Я также пытался с предыдущим Сиблингом, но не лучшие результаты.
Заранее спасибо!
2 ответа
Решение
Проверьте переключатель перед "мужским" текстом.
http://jsfiddle.net/hmariod/ZtuKD/1/
function setM() {
var inps = document.getElementsByTagName("input");
for(var i = 0; i < inps.length; i++){
if(inps[i].type == "radio" ){
if(inps[i].nextSibling.data.indexOf("Male") > -1){
inps[i].setAttribute("checked","checked");
}
}
}
}
$('div').contents().filter(function() {
var tn = this.textContent || this.innerText;
return $.trim(tn) === 'Male';
}).prev('input[type=radio]').prop('checked', true);
Или же:
<div>
Select Gender:
<input id='male' type="radio" />
<label for='male'>Male</label>
<input id='female' type="radio" />
<label for='female'>Female</label>
</div>
$('div label').filter(function() {
return $(this).text() === 'Male';
}).prev().prop('checked', true);