2016-05-04 2 views
2

Ich versuche, ein Element automatisch zu öffnen, wenn ein Containing von ID aufgerufen wird, zum Beispiel: http://www.example.com/page.html#container. Im Idealfall möchte ich, dass Sie bis zu dem Punkt der Seite blättern, auf der sich das Element befindet (innerhalb des Zusammenfassungselements), und dann das Detailelement öffnen. Offensichtlich funktioniert die native Scroll-Funktion gut, aber wie kann ich das Detailelement zum Öffnen einstellen?Automatisch <details> Element bei ID-Aufruf öffnen

Hier ist meine HTML-Quelle:

<details class="concentration"> 
    <summary> 
     <h4 id="sample-slug"><?php the_sub_field('emphasis_name'); ?></h4> 
    </summary> 

    <p><?php the_sub_field('emphasis_description'); ?></p> 

    <div class="courses"><?php the_sub_field('emphasis_course_list'); ?></div> 
</details> 

Wenn example.com/page.html#sample-slug genannt wird, wie kann ich die Details Element bewusst, dass zu machen, und fügen Sie das „offene“ Attribut? Ich möchte sicherstellen, dass der Inhalt sichtbar ist, wenn der Anker aufgerufen wird.

+0

ersten Aktien Code, fragen Sie dann die spezifische Frage. Diese Frage sollte, wie sie geschrieben ist, als offtopisch geschlossen werden. Lesen Sie die Hilfe, um weitere Informationen zu erhalten. –

+0

Ich habe keinen Code, ich frage, ob es möglich ist, ohne Javascript zu tun. Ich weiß nicht viel über das Element

, weil es ziemlich neu ist. Möchten Sie meine HTML-Quelle sehen? – authorandrew

+0

Beim Lesen der Richtlinien ist dies eine vollkommen akzeptable Frage. Ich habe keinen Code zum Teilen, ich frage nach dem Verhalten eines HTML-Elements, also ist der Umfang nicht lächerlich, und es ist nicht offen oder subjektiv. Es gibt nichts in den Richtlinien, das sagt, dass ich einen Codeblock einschließen muss, oder? – authorandrew

Antwort

1

Ich glaube nicht, dass Sie <details> mit CSS allein öffnen können. Aber Sie können:

  1. Holen Sie sich den Hash mit location.hash. Möglicherweise hören Sie hashchange Ereignis.
  2. Verwenden Sie document.getElementById, um das Element zu erhalten.
  3. Setzen Sie die Eigenschaft open auf true.

function openTarget() { 
 
    var hash = location.hash.substring(1); 
 
    if(hash) var details = document.getElementById(hash); 
 
    if(details && details.tagName.toLowerCase() === 'details') details.open = true; 
 
} 
 
window.addEventListener('hashchange', openTarget); 
 
openTarget();
:target { 
 
    background: rgba(255, 255, 200, .7); 
 
}
<details id="foo">Details <summary>Summary</summary></details> 
 
<div><a href="#foo">#foo</a> <a href="#bar">#bar</a></div>

+0

Hatte gerade eine ähnliche Stelle erreicht und das funktionierte ein Leckerbissen. Ich hatte meinen Codeblock (es ist ein wenig einfacher) aber es funktioniert gut. – authorandrew

+0

Eine weitere Falte, und ich denke, das ist mit dem Event-Listener verbunden. Wenn ich zuerst eine Seite mit einem Hash (http://www.mbts.edu/academics/masters-studies/mdiv/#preaching) lade, blinkt das '

' Element (wie: Zielselektor), tut es aber nicht öffnen. Nachdem die Seite geladen wurde, wenn ich den Hash ändere oder auf einen In-Text-Anker klicke, öffnet sich
ganz gut. Bin ich richtig, dass das Hinzufügen eines zweiten Zuhörers dies korrigieren würde? – authorandrew

+0

Das Hinzufügen von 'window.addEventListener ('load', openDetails);' behebt dieses Problem. Danke für deine Lösung! – authorandrew

Verwandte Themen