2015-05-30 2 views
2

Я хочу скрыть только текст First Text, используя (opacity:0), когда я курсирую над topblock.Как получить текст этого элемента, а не ребенка

<div class="topblock"> 
    First Text 
    <div class="block"> 
     Inner Text 
    </div> 
</div> 

Но когда я использую следующий код JQuery я получаю ребенка DIV текст также First Text Inner Text

$(".topblock").on("mouseenter",function(){ 
    console.log($(this).text()); 
    $(this).css({"opacity":"0"}) 
}).on("mouseleave",function(){ 

}); 
+0

Изменение непрозрачности сделает все внутренние элементы изменить непрозрачность. Вы бы разделили эти блоки в контейнере div. – Daniel

ответ

3

Чтобы сделать то, что вам требуется, без внесения изменений в структуру HTML будет исключительно сложно, как вам нужно будет внести изменения в textNode проведение значение First text непосредственно.

Вместо этого было бы гораздо проще просто изменить свой HTML, чтобы обернуть этот текст в другой элемент, например span, и выполнить операции над этим элементом. Попробуйте это:

<div class="topblock"> 
    <span>First Text</span> 
    <div class="block"> 
     Inner Text 
    </div> 
</div> 
$(".topblock").on("hover",function(){ 
    $(this).find('span').toggle(); 
}); 
+0

Да, это решило мою проблему. Как правило, задавать вопрос, как я могу выполнить некоторую операцию над содержимым 'topblock', исключая внутренний текст (без внутреннего диапазона). –

+1

Используя вышеописанный метод, вы можете просто нацелить« span », как в моем примере. Если вы не можете изменить HTML-код, вам нужно будет получить textNode и программно перевернуть его в «span». Чтобы получить textNode: '$ ('. Topblock'). Contents(). Filter (function() {return this.nodeType == 3;}). First()'. Затем вам понадобится 'wrap()' и 'hide()' или 'show()' it. –

1

Вы не можете просто скрыть часть блока. Вы можете поставить First text в пролете и скрыть промежуток, когда мышь ввести блок topblock

1

невозможно сделать с помощью opacity, но вы могли бы выполнить его, установив color, чтобы соответствовать цвету фона на парении.

Вот как достичь эффекта при наведении .topblockкроме при наведении его .block ребенка. Обратите внимание на использование CSS !important:

$('.topblock').hover(
 
    function() { 
 
    $(this).addClass('white'); 
 
    }, 
 
    function() { 
 
    $(this).removeClass('white'); 
 
    }); 
 

 
$('.block').hover(
 
    function() { 
 
    $('.topblock').addClass('black'); 
 
    }, 
 
    function() { 
 
    $('.topblock').removeClass('black'); 
 
    });
.topblock .block, .black { 
 
    color: black !important; 
 
} 
 

 
.white { 
 
    color: white; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="topblock"> 
 
    First Text 
 
    <div class="block"> 
 
     Inner Text 
 
    </div> 
 
</div>

+0

Проблема заключается в том, что Hover над «Внутренним текстом» также скрывает первый текст. Возможно ли сделать Hover исполняемым только на первом тексте? Я думаю, нам нужен диапазон, предложенный @MatthieuLemoine & others –

+0

Добавление диапазона, конечно, упрощает, но я обновил свой ответ с помощью решения, которое работает без этого. –