2015-08-28 2 views
2

У меня есть тег <p>, который мне нужно, чтобы скрыть текст. Существует <span> внутри <p>, из которых я не хочу скрывать этот текст. Можно ли обойтись без изменения разметки с помощью jQuery?Как скрыть все внутри тега p, кроме span jQuery?

Fiddle: http://jsfiddle.net/ghogdc0x/2/

HTML:

<p class="class"> 
    <span>Text not to hide</span> 
    <br> 
    Text to hide 
</p> 
+0

Пожалуйста, отметьте лучший ответ, как принято для того, чтобы помочь будущим посетителям. – Ahmad

ответ

2

Вы можете использовать свойство видимости CSS:

$('.class').css('visibility', 'hidden'); 
$('.class').children().css('visibility', 'visible'); 

Here is a working codepen

И тогда вы могли бы сделать его видимым, выполнив:

$('.class').css('visibility', 'visible'); 
+0

Обратите внимание, что этот способ не удаляет элемент из потока страницы и делает его невидимым. – Ahmad

2

Просто вы можете скопировать элемент диапазона вблизи р тега, а затем скрыть р тег. Попробуйте это:

$("p").after($("p span")) 
$("p").hide() 
+2

Это очень неправильно. Это изменяет структуру DOM. Это также дублирует содержимое. http://jsfiddle.net/rjnw6d15/ – undefined

+0

Это вносит изменения в DOM, но не в разметку. И не создает проблем, если вы будете осторожны в своих действиях. И это единственный способ сделать это, не используя невидимые трюки. – Ahmad

+0

Как он/она должен быть осторожным? Что такое «невидимые трюки»? И нет, это не единственное решение, ведь ваш предлагаемый код даже не является решением, так как он не решает проблему, если имеется более одного элемента 'p'. – undefined

0

Вы можете 'Скрыть текстовые узлы. Вы можете удалить их или обернуть их другим элементом и скрыть этот элемент оболочки.

Следующий фрагмент кода скрывает элементы не-span и удаляет дочерние узлы текстовых узлов.

$('p.class').contents().each(function() { 
    var $this = $(this); 
    if (this.nodeType === 3 && $.trim(this.nodeValue)) { 
     $this.remove(); 
     // in case that you just want to hide the text node 
     // $this.wrap('<i>').parent().hide(); 
    } else if (this.nodeType === 1 && this.tagName !== 'SPAN') { 
     $this.hide(); 
    } 
}); 

http://jsfiddle.net/xxpopvje/

0

Используйте это и попытаться обернуть текст, который будет прятаться в обертку р элемент как

<p><span>Text not to hide</span><br/><p>Text to hide</p></p> 

$('p').find('*').not('span').css('display','none'); 
Смежные вопросы