2013-05-02 2 views
0

У меня есть огромный HTML-страницу с десятками комментариев внутри ЦитатыСкрыть Цитаты но заменить Newline

Am пытается дать ссылку, чтобы скрыть все комментарии с одним щелчком мыши, так что я использовал этот

уаг массив = document.getElementsByTagName ('BLOCKQUOTE'); для (var i = 0; i < array.length; i ++) { array [i] .style.display = 'none'; }

Это прекрасно работает, но проблема заключается в том, что элементы blockquote работали также как символ новой строки. Теперь, когда я скрываю элементы blockquote, нет новой строки.

Есть ли способ скрыть блок-кавычки и заменить на новую строку? Это нужно сделать, не удаляя весь текст в blockquotes, поскольку это отображение/скрытие комментариев.

+0

Вы можете вставить html? – 2013-05-02 05:47:57

+0

пример: textt
текстыdf

комментарий
больше текста dfgd df gdf. –

+0

Почему вы не дали им имя класса и спрятали их? – 2013-05-02 05:50:55

ответ

1

Когда вы устанавливаете display: none, элемент не может произвести рендеринг; страница будет отображаться так, как если бы элемент отсутствовал. Поэтому вам нужно будет использовать какой-то другой способ скрытия содержимого, чтобы элемент все-таки вызывал что-то, например, разрыв строки.

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

var array = document.getElementsByTagName('blockquote'); 
for(var i = 0; i < array.length; i++) { 
    array[i].savedContent = array[i].innerHTML; 
    array[i].innerHTML = ''; 
    array[i].style.margin = 0; 
} 

В коде, который восстанавливает комментарий содержимое, вы могли бы сделать обратную операцию, восстанавливая innerHTML от savedContent и установки верхнего и нижнего полей. Для согласованности было бы лучше установить эти поля статически на некоторые известные значения, чтобы вы могли затем восстановить те же самые значения.

Я бы ожидал, что имя свойства, например savedContent, будет достаточно безопасным (т. Е. Не столкнуться с любым существующим свойством узлов элемента), но, чтобы быть в действительно безопасной стороне, было бы лучше использовать такое имя, как data-content вместо этого, естественно, с обозначением в виде скобок вместо точечной нотации, например array[i]['data-content'].

+0

попробовать. Благодарю. получить ошибку, когда я пытаюсь восстановить комментарии, которые не определены первой переменной массива. Как получить доступ к первой переменной массива во второй функции? –

+0

Вам нужно сделать переменную 'array' global или выполнить' var array = document.getElementsByTagName ('blockquote') 'во второй функции тоже. Я предполагаю, что вы пытались использовать локальную переменную функции в другой функции, которая здесь не работает. –

+0

ОК. работал. спасибо Юкка! –

0
how about something like this 

<br class="b"><blockquote> 
commentary 
</blockquote><br class="b"> 

then toggle the display of class b. so 
if blockquote is display:block class b is display:none 

and 
if blockquote is display:none class b is display:inline 
Смежные вопросы