2015-04-24 2 views
2

Я беру довольно старый сайт и делаю его отзывчивым. Разработчик настроил «nav», как показано ниже, ни один список или что-то еще. Мобильный навигатор будет вертикальным, и я не хочу, чтобы «|» персонаж. Я хочу сделать это, не касаясь навигационного HTML или добавив второе меню для отображения на меньших экранах.Замените все персонажи труб в Div

<div id="mainNav"> 
    <a href="/home">Home</a>| 
    <a href="/about">About</a>| 
    <a href="/areas-of-practice">Areas of Practice</a>| 
    <a href="/in-the-news">In the News</a>| 
    <a href="/contact">Contact</a> 
</div> 

Я пробовал эту линию JQuery, но мне кажется, удалить тег, а также «|», оставив строку «HomeAboutAreas из PracticeIn в NewsContact». Как мне удалить только «|» и оставить все остальное как есть?

$('#mainNav').text(function(index,text){ 
    return text.replace(/[|]/g,''); 
}); 
+1

Использование '.text()' раздевает все теги и возвращает только текст, используйте '.html()' вместо этого. – squill25

ответ

4

Использование .html вместо .text так вы держите HTML.

В регулярном выражении также нет необходимости использовать [], когда вы просто заменяете один символ. Однако вам нужно избежать символа трубы вне набора символов, поскольку это означает чередование.

$("#doit").click(function() { 
 
    $('#mainNav').html(function(index, text) { 
 
    return text.replace(/\|/g, ''); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="mainNav"> 
 
    <a href="/home">Home</a>| 
 
    <a href="/about">About</a>| 
 
    <a href="/areas-of-practice">Areas of Practice</a>| 
 
    <a href="/in-the-news">In the News</a>| 
 
    <a href="/contact">Contact</a> 
 
</div> 
 
<button id="doit">Remove pipes</button>

+0

Хорошо, это имеет смысл! Теперь, Николас Кириакидес представил интересную идею ниже. Скажем, я могу прикоснуться к HTML. Использовать ли метод JS выше или добавить элементы и скрыть их с помощью CSS. Мне лично нравится версия JS, потому что я ненавижу добавлять HTML-крючки. – ansarob

+0

Я не говорю, что вы не должны использовать JS, но я бы лично поставил все, что было связано с макетированием/дизайном/презентацией в HTML/CSS, насколько это возможно - вы будете в любом случае использовать медиа-запросы –

+0

True. Когда я прочитал ваш комментарий, я наклоняюсь в другую сторону. Как я уже сказал, мне не нравится добавлять элементы в HTML, но иногда это лучший способ. – ansarob

2

Поместите символы 'трубы' в отдельном <span> elemenet который затем скрыть с помощью CSS media queries

HTML:

<a href="/areas-of-practice">Areas of Practice <span>|</span></a> 

CSS

@media (max-width: 320px) { 
    .mainNav a span { 
    display: none; 
    } 
} 

Или вы можете просто дать border-right:1px solid black ваших a элементов, которые вы затем вернуться к 0px; с помощью запросов медиа - Это полностью канав | символов и использует простой CSS для достижения вашего предполагаемого результата

#mainNav a{ 
 
    padding:2px; 
 
    border-right:1px solid black; 
 
} 
 

 

 

 
@media (max-width: 600px) { 
 
    #mainNav a{ 
 
    border-right:0px solid black; 
 
    } 
 
}
<div id="mainNav"> 
 
    <a href="/home">Home</a> 
 
    <a href="/about">About</a> 
 
    <a href="/areas-of-practice">Areas of Practice</a> 
 
    <a href="/in-the-news">In the News</a> 
 
    <a href="/contact">Contact</a 
 
</div>

+0

Это метод, с которым я пошел. Это действительно так просто, но мой ум думал только JS. Но я не мог выбрать это как правильный ответ, так как я просил решение JS. Я голосовал, хотя, спасибо! – ansarob

0

Демо: https://jsfiddle.net/erkaner/6mtafkek/1/

Вы можете получить только ссылки и добавлять их обратно в DIV:

var links = $('#mainNav a'); 

$('#mainNav').html('').append(links); 


a{ 
    margin-right:5px; 
} 
+0

Интересно, но кажется странным способом сделать это. Благодаря! – ansarob

0

Попробуйте это:

$('#mainNav').html(function(index,text){ 
 
    return text.replace(/[|]/g,''); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="mainNav"> 
 
    <a href="/home">Home</a>| 
 
    <a href="/about">About</a>| 
 
    <a href="/areas-of-practice">Areas of Practice</a>| 
 
    <a href="/in-the-news">In the News</a>| 
 
    <a href="/contact">Contact</a> 
 
</div>

3

Можно сделать это с помощью CSS в одиночку, установив родительский размер шрифта до нуля и настройки размера детей шрифта для любого используемого по умолчанию является

#mainNav { font-size:0; } 
#mainNav a { font-size:14px; } 

DEMO

И для решения javascript, которое не заменяет элементы (и, возможно, связанные с ними события), вы можете удалить текстовые узлы, используя:

$('#mainNav').contents().filter(function(){ 
    return this.nodeType === 3; 
}).remove(); 

DEMO 2

+0

Хм ... интересный. Никогда не думал об этом методе! – ansarob

+0

другой подход по линии моей первой идеи css задан цветом для соответствия фону – charlietfl

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