2014-12-11 5 views
-1

Можно ли использовать JQuery для скрытия входных элементов плюс текст после ввода? Код генерируется, поэтому я не могу изменить текст, обернуть его в промежутке или изменить его каким-либо образом.Изменение текста с помощью JQuery после div

<label>Event Location <span class="req">*</span></label><br> 
<input type="radio" name="a22" id="a22_0" value="Lafayette LA">Lafayette LA<br> 
<input type="radio" name="a22" id="a22_1" value="Houston TX">Houston TX<br> 
<input type="radio" name="a22" id="a22_3" value="San Antonio TX">San Antonio TX 
+0

Какова полная структура этой формы? «Текст» не является элементом как таковым и поэтому не может быть выбран кроме текстового узла. –

+0

Является ли этот фрагмент кода обманутым вокруг контейнера? – vaso123

+3

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

ответ

0

Он завернут в тэг. Вот что у меня есть сейчас:

$("label:contains('Event Location')").parent("td").wrap("<span class='set-cities'></span>"); 
$('.set-cities').empty(); 
$('.set-cities').append("<td><label>Event Location <span class='req'>*</span></label><br><input type='radio' name='aa2' id='aa2_1' value='Houston TX' checked='checked'>Houston TX<br></td>"); 

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

0

Если вы хотите заменить текстовый узел напрямую, это способ сделать это. Я позаимствовал из https://stackoverflow.com/a/298758/728393 и с учетом его конкретной ситуацией

function replaceTextAfter(selector,newtext){ 
    var textnode = $(selector).parent().contents() // we need to contents as a collection 
    .filter(function(){ 
     return this.nodeType == 3 && $(this).prev().is($(selector)); //return true if node is text and the previous node is our selector 
    }); 
    textnode[0].data = newtext; //change the text 
} 

replaceTextAfter('#a22_0','abc'); 

http://jsfiddle.net/z606no23/

+0

Поместите HTML (TABLE, TR, TD), показанный в ответе OPs ниже, и у вас есть совершенно новый игровой мяч, которого я боюсь. Пробелы меня раздражают :) –

+0

@TrueBlueAussie Bleh, ну, это пример того, как создать собственное решение. Я сомневаюсь, что «надежное» решение возможно. – slicedtoad

+0

С первых дней моих комиксов я думаю, что написано «Блех» :) –

1

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

например

JSFiddle:http://jsfiddle.net/TrueBlueAussie/6gzfLorp/3/

$('td').contents().each(function (e) { 
    if (this.nodeType == 3 && $(this).prevAll(':radio').length) { 
      $(this).wrap($('<span>').hide()); 
    } 
}); 

Примечание: Ваш вопрос немного неоднозначным, но казалось бы, из Вашего ответа у вас есть TDs, которые вы могли бы просто скрыть все содержимое TD с помощью:

http://jsfiddle.net/TrueBlueAussie/6gzfLorp/7/

$('.set-cities td').each(function (e) { 
    $(this).contents().wrapAll($('<span>').hide()); 
}); 
0

Тхи не удалить весь текст после элемента сделано, пока новый тег http://jsfiddle.net/alemarch/hm7ey6t5/

function deleteElemPlusText(elem) { 
    var contestoHtml = $(elem).parent().html() 
    var thisHtml = $(elem).get(0).outerHTML // $(elem).outerHTML() 
    var re = new RegExp(thisHtml + "([^<])*") 
    var newContesto = contestoHtml.replace(re, "") 
    $(elem).parent().html(newContesto) 
} 

function deleteAllElemsPlusText(toDelete) { 
    var x = $(toDelete).length; 
    for (var i = 0; i < x; i++) { 
    deleteElemPlusText($(toDelete).eq(0)) 
    } 
} 

deleteAllElemsPlusText("input[type=radio]") 

Примечание: не все браузер имеют доступ свойства outerHTML, но вы можете использовать этот плагин Jquery http://www.darlesson.com/jquery/outerhtml/

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