2017-02-01 2 views
0

Ich versuche eine versteckte Div-Tag-Anzeige zu haben, wenn ich einen bestimmten Text hervorhebe. Ich konnte eine versteckte div auszukommen hervorgehoben angezeigt werden, aber die 2 Teile ich nicht sind ausführen kann:Show DIV On Highlight Dann Ausblenden

  1. nur zeigen, wenn bestimmten Text markiert (I eine span-Tag-ID oder etwas ähnliche assume verwenden)

  2. Nachdem die Anzeige in den Block geändert wurde, ändern Sie sie nach 5 Sekunden wieder in den Modus "Versteckt".

Hier ist mein Versuch. Wiederum zeigt dies das versteckte div auf Hervorhebung, aber das ist so weit wie ich habe. Bitte helfen Sie!

function ShowNote() { 
 
    document.getElementById('Note').style.display = 'block'; 
 
} 
 

 
document.onmouseup = ShowNote; 
 
if (!document.all) document.captureEvents(Event.MOUSEUP); 
 

 
function HideNote() { 
 
    document.getElementById('Note').style.display = 'hidden'; 
 
} 
 
setTimeout("HideNote()", 5000); // after 5 secs
I DON'T want it to show when I highlight this text 
 
<br />I DO want it to show when I highlight this text. 
 
<div type='text' id='Note' style="display:none;">HIDDEN DIV CONTENT</div>

+0

Welche Fehler Sie in Ihrem Browser erhalten? Werfen Sie eine schnelle jsfiddle auf, aber ich kann jetzt sagen, dass Sie mit diesem Code den Fehler bekommen "Uncaught ReferenceError: HideNote ist nicht definiert". –

+0

[Siehe dies] (http://stackoverflow.com/a/3545105/1891677) und möglicherweise die darüber. –

+0

'style.display = 'hidden' ist nicht gültig. Du willst 'style.display = 'none';' –

Antwort

1

Sie verwenden ziemlich alten und antiquierten Code. Hier ist der moderne Ansatz:

function showNote() { 
 
    document.getElementById('Note').classList.remove("hide"); 
 
    setTimeout(hideNote, 5000); // after 5 secs 
 
} 
 

 
function hideNote(){ 
 
    document.getElementById("Note").classList.add("hide"); 
 
} 
 

 
document.getElementById("select").addEventListener("mouseup", showNote);
.hide { display: none; } 
 

 
#select { color:red; }
<div>I DON'T want it to show when I highlight this text</div> 
 
<div>I DO want it to show when I highlight <span id="select">this text</span>.</div> 
 
<div type='text' id='Note' class="hide">HIDDEN DIV CONTENT</div>

2

Sie sind ganz in der Nähe!

Hier ist, was ich habe:

function ShowNote() { 
 
    if(window.getSelection() == "I DO want it to show when I highlight this text.") 
 
     document.getElementById('Note').style.display = 'block'; 
 
     setTimeout(function(){ 
 
     \t document.getElementById('Note').style.display = 'none'; 
 
     }, 5000); // after 5 secs 
 
    } 
 
    
 
    document.onmouseup = ShowNote; 
 
    if (!document.all) document.captureEvents(Event.MOUSEUP);
I DON'T want it to show when I highlight this text<br /> 
 
    I DO want it to show when I highlight this text. 
 
    <div type='text' id='Note' style="display:none;" >HIDDEN DIV CONTENT</div>

Änderungen:

  • Sie müssen prüfen, was über die "window.getSelection()" Funktion markiert ist.
  • Sie wurden ein String
  • versteckt ist Option keine gültige Anzeige SetTimeout vorbei, keiner ist

So wissen Sie, es in der Regel eine schlechte Praxis ist Text nur noch um Tags außerhalb des Schwebens. So ist es am besten, Ihre ersten zwei Zeilen in <p> Tags oder etwas zu kleben.

+1

Danke für die Bearbeitung Rübe – Glitcher

+1

Dot die i's und die PINs zurücktippen. Das ist das Sprichwort, richtig? : p – Turnip

0

Dies ist, was ich für Sie getan haben. I Setup-Intervall. das passiert jedes Mal, wenn Sie die Maus ausziehen. Oder noch besser, es wird prüfen, ob es der Stil Ihres DIV ist Block auf der Seite. this helps Live exapmle on Codepen

var target = document.getElementById('note'); 

var i = setInterval(function(){ 
    if (document.getElementById("note").style.display == 'block') { 
    hide(); 
    } 
}, 5000); 

function showNote() { 
    target.style.display = 'block'; 
} 
function hide(){ 
document.getElementById("note").style.display = "none"; 
}