İşaretlemede çapraz referans (bağlantı adı verilir)


511

Şuna eşdeğer bir işaretleme sözdizimi var mı :

Take me to <a href="#pookie">pookie</a>

... 

<a name="pookie">this is pookie</a>

Yanıtlar:


691
Take me to [pookie](#pookie)

pookie adlı bağlantı noktasına atlamak için doğru işaretleme sözdizimi olmalıdır.

Bu adın bağlantı noktasını eklemek için HTML kullanın:

<a name="pookie"></a>

Markdown, bağlantı noktasını nereye koyduğunuza dikkat etmiyor. Koymak için yararlı bir yer bir başlıktadır. Örneğin:

### <a name="tith"></a>This is the Heading

çok iyi çalışıyor. (Burada gösteri yapardım ama SO'nun oluşturucusu demiri çıkarır.)

Kendiliğinden kapanan etiketler ve id=bununla ilgili notname=

Bu yayının önceki bir sürümü, <a id='tith' />XHTML için kendi kendine kapanan sözdizimini ve idbunun yerine özniteliği kullanmayı önerdi name.

XHTML, herhangi bir etiketin 'boş' ve 'kendi kendine kapalı' olmasına izin verir. Yani, boş bir gövdeli eşleşen bir çift etiket <tag />için kısa elidir <tag></tag>. Çoğu tarayıcı XHTML'yi kabul eder, ancak bazıları kabul etmez. Tarayıcılar arası sorunları önlemek için etiketi kullanarak etiketi açıkça kapatın.<tag></tag> , yukarıda önerildiği gibi .

Son olarak, özellik name=XHTML'de kullanımdan kaldırıldı, bu yüzden başlangıçta id=herkesin tanıdığı kullandım. Bununla birlikte, HTML5 artık kullanırken JavaScript'te genel bir değişken oluşturur id=ve bu istediğiniz şey olmayabilir. Yani,name= şimdi daha kolay olacaktır.

(Sayesinde Slipp Douglas bana XHTML açıklayan ve nailer HTML5 yan etkiye işaret için - bir yorum ve gör nailer 'ın cevabı daha fazla ayrıntı için. name=İşin göründüğünden her yerde, bu XHTML'de kullanımdan kaldırılmıştır bile.)


1
StackOverflow HTML'yi oluşturduktan sonra başlık demonuza nasıl bağlanacağınızı göremezsiniz, çünkü oluşturulmuşları <a> etiketinizi çıkarır . Yani, StackOverflow Markdown'da yapamazsınız.
Slipp D.Thompson

2
Ancak, bu, daha liberal Markdown işleyicilerinde işe yarayacaktır, ancak kapanış <a> etiketine ihtiyacınız olacaktır ; <a> etiket kendi kendine kapanmasını izin vermez. Ayrıca, <a> etiketi başlık içeriğinden önce olmadıkça tarayıcımı başlığı atlayarak buldum . Örneklerinizde düzeltmeler yapıldı.
Slipp D.Thompson

2
Orada dur kovboy. Bir üzerinde herhangi stil yok diye <a>bir href olmadan 's öz kapanmasını anlamına gelmez. Tamamen delice farketmedikçe, her ikisi de: test-xhtml11 ve [ sln.6bitt.com/public/test-html5.html Genişletilmiş(test- html5) sayfanın geri kalanını <a> etiketi içinde işler . Devam edin ve istediğiniz bir web denetçisi ile inceleyin.
Slipp D.Thompson

4
@Slipp: Tamam, sanırım şimdi anlıyorum. Sen kodladın <a id="hi"/> rest of doc, ama ona benziyordu <a id="hi"> rest of doc</a>. (Ve sayfanın eleman analizi de bunu gösteriyor.) Benim hatam: Ham kaynakta görüntülenmeyen unsurlara baktım. Sizce bu gözlem ışığında cevabın değiştirilmesi gerekiyor mu?
Steve Powell

3
Bu nameözellik aynı zamanda genel değişkenler de oluşturur (bkz. Stackoverflow.com/questions/3434278/… ), bu nedenle idözelliği, tanımlayıcı URL'lerinin hedefi olarak amaçlandığı gibi de kullanabilirsiniz .
Bobby Jack

92

Bitbucket.org'da oylanan çözüm işe yaramaz. Bunun yerine, üstbilgileri (## ile) kullanırken, # markdown-header-header-name olarak önek olarak ankrajlar olarak referans vermek mümkündür; burada # markdown-header - oluşturucu tarafından oluşturulan örtük bir önektir ve geri kalanı ise boşlukların yerini alan tire işaretleri olan alt kasalı başlık başlığıdır.

Misal

## My paragraph title

bunun gibi örtük bir çapa üretecek

#markdown-header-my-paragraph-title

Her bağlantı referansından önceki URL'nin tamamı isteğe bağlıdır, yani

[Some text](#markdown-header-my-paragraph-title)

eşittir

[Some text](https://bitbucket.org/some_project/some_page#markdown-header-my-paragraph-title) 

ancak aynı sayfada olmaları şartıyla.

Kaynak: https://bitbucket.org/tutorials/markdowndemo/overview (bu .md dosyasının kaynağını düzenleyin ve bağlantıların nasıl yapıldığına bakın).


1
Bu da olabilir. Buna göre: confluence.atlassian.com/bitbucket/… , bitbucket , belge başlıklarına dayalı olarak bağlantıları ve çapaları otomatik olarak oluşturabilen İçindekiler uzantısını destekler . TOC uzantısı burada belgelenmiştir: pythonhosted.org/Markdown/extensions/toc.html Oluşturulması için belgenin başına "[TOC]" metnini ekleyin.
İkili Phile

8
Github'da ## My paragraph titleaşağıdaki bağlantı noktasını oluşturur user-content-my-paragraph-title, böylece [Bazı metinler] (# kullanıcı-içerik-paragrafım-başlığı) ile referans verebilirsiniz. Ancak bunun için resmi bir belge bulamadım.
toto_tico

Bu da Bitbucket'te bana yardımcı oldu - bir cazibe gibi çalışıyor.
Scott Byers

1
Bu yararlı bilgilerdir; teşekkür ederim. Bununla birlikte, uzantıları olmayan etiketleme oluşturucular sizin için bu bağlantı noktalarını oluşturmaz ve başlık adlarını çakışmak bağlantı kimliklerinin (veya sayı yeterlilikleri gibi bazı yararsız ayırt edici numaraların) çatışmasına neden olur. Açık bağlantı kimlikleri daha iyi, daha kontrol edilebilir, metin güncellemeleri (yukarıdaki numaraya bakınız) nedeniyle rastgele değişikliklere tabi değildir ve başlıklardan daha fazlasını sabitlemek için kullanışlıdır. Genel olarak her iki tekniğe de ihtiyaç vardır.
Steve Powell

On stackedit.io [linky](#header) yeterli çapa, ve de Gist yayınlanır zaman çalıştı.
Felipe Alvarez

67

A kullanın name. idHTML 5'te bir kullanmak gerekli değildir ve JavaScript'inizde genel değişkenler oluşturur

Bkz. HTML 5 teknik özelliği, 5.9.8 Bir parça tanımlayıcıya gitme - hem idve hem namede kullanılır.

Çoğu tarayıcının hala kimlikleri global değişkenlere dönüştürdüğünü bilmek önemlidir . İşte hızlı bir test . Bir nameönleme kullanmak, globaller ve ortaya çıkabilecek çatışmaları oluşturmayı önler.

Bir isim kullanan örnek:

Take me to [pookie](#pookie)

Ve hedef çapa:

### <a name="pookie"></a>Some heading

5
Downvoting. Global değişken argümanı zayıftır çünkü JS'nizde (doğrudan) global değişkenleri zaten tanımlamamalısınız, bu yüzden çatışma olmaz. Ayrıca, anlambilimi nameve idfarklıdır.
Marnen Laibow-Koser

9
@ MarnenLaibow-Koser JS'de küresel değişkenleri tanımlayan kimse tartışmıyor. HTML'de kimlik oluşturmak, çoğu tarayıcıda genel bir window.someid oluşturur.
mikemaccana

14
@ MarnenLaibow-Koser Pek çok kütüphane (yani kendi JS'niz değil, başka birinin kütüphaneleri) tek bir global (örneğin, ince yükleyici) kullanır. Kimliğine sahip bir öğe fineuploaderyaparsanız, fineuploadermodülü kullanamazsınız . Gereksiz küreseller oluşturmaktan kaçınmak, bu çatışmaların önlenmesine yardımcı olur.
mikemaccana

5
Bu davanın bazı testlerini yapmak ve hangisinin öncelikli olduğunu öğrenmek isterim. Teorik konuyu takdir ediyorum, ancak yıllarca istemci tarafı geliştirmede, herhangi bir istemci tarafı JS'yi (ID başka türlü geçerli olması şartıyla) kesmedim. Gerçek problemlerle karşılaşıncaya kadar bunları semantik olarak uygun olduklarında kullanmaya devam edeceğim.
Marnen Laibow-Koser

2
@ MarnenLaibow-Koser I (ve diğerleri) HTML kimlikleri gerçek JavaScript'i kırdı - yanıtladığınız yorumda çok pratik bir örnek var! Singletonlar için bile her zaman sınıf kullanan birçok stil rehberi ve şirket var ve bu yüzden.
mikemaccana

17

İşaretleme Bağlantısı karma işaretini destekler, bu nedenle sayfadaki bir bağlantıya bağlantı[Pookie](#pookie)

Çapanın oluşturulması aslında Gruber Markdown'da desteklenmez, ancak Markdown Extra gibi diğer uygulamalarda da desteklenir .

Markdown Extra'da bağlantı kimliği, ile bir başlığa veya alt başlığa eklenir {#pookie}.

Git depo sayfalarındaki (ancak Gists'te değil) Github Aromalı İşaretleme , otomatik olarak tüm başlıklarda (h1, h2, h3 vb.) Çeşitli biçimlendirme etiketlerine sahip çapalar oluşturur :

  • id="user-content-HEADERTEXT"
  • class="anchor"
  • href="#HEADERTEXT"
  • aria-hidden="true" (bu, fareyle üzerine gelindiğinde görüntülenen bir svg bağlantı simgesi içindir)

Biri yazdığında aria / svg simgesi hariç:

  • # Header Title

Github üretir:

  • <h1><a id="user-content-header-title" class="anchor" href="#header-title">Header Title</a></h1>

Bu nedenle, başlık bağlantıları oluşturmak için hiçbir şey yapmanıza gerek yoktur ve bunlara her zaman aşağıdakilerle bağlanabilir:

  • Bağlantısı [Header Title](#header-title)

16

Orijinal Markdown sözdiziminde bunu yapmak için hazır bir sözdizimi yoktur, ancak Markdown Extra , en azından başlıklara kimlik atamak için bir yol sağlar - bu daha sonra kolayca bağlantı kurabilirsiniz. Ayrıca, Markdown ve Markdown Extra öğelerinde normal HTML kullanabileceğinizi ve HTML'nin daha yeni sürümlerinde özelliğin nameyerini aldığını unutmayın id.


9

GitBook'ta bu soruna bir çözüm arayan herkes için. Ben işte böyle yaptım (GitBook'ta). Başlığınızı şu şekilde açıkça etiketlemeniz gerekir:

# My Anchored Heading {#my-anchor}

Sonra bu çapa böyle bağlayın

[link to my anchored heading](#my-anchor)

Çözüm ve ek örnekler burada bulunabilir: https://seadude.gitbooks.io/learn-gitbook/


Teşekkürler! bu çalışıyor! bu iptal edilmelidir!
Dexter

En iyi cevap! Teşekkürler
invis

7

Partiye geç kaldım, ama bu ekin birlikte çalışan insanlar için yararlı olabileceğini düşünüyorum rmarkdown. Burada rmarkdownbelgenizdeki başlıklara referanslar için yerleşik destek vardır.

Tarafından tanımlanan herhangi bir başlık

# Header

tarafından referans verilebilir

get me back to that [header](#header)

Aşağıdaki, .rmdbu davranışı gösteren en az bağımsız bir dosyadır. Örme .pdfve .html.

---
title: "references in rmarkdown"
output:
  html_document: default
  pdf_document: default
---

# Header

Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. Write some more text. 

Go back to that [header](#header).

4

En son Markdown'u kullanarak aşağıdaki sözdizimini kullanabilmeniz gerekir:

[](){:name='anchorName'}

Bu, aşağıdaki HTML'yi oluşturmalıdır:

<a name="anchorName"></a>

Bağlantı metninin metin olmasını istiyorsanız, bağlantı metnini köşeli parantez içine eklemeniz yeterlidir:

[Some Text](){:name='anchorName'}


Sadece Marukubu sözdizimini biliyor gibi görünüyor . Babelmark'a bakın.
Ulysse BN

3

En yaygın markdown jeneratörleri için. Her başlıkta basit bir kendi oluşturduğunuz çapa vardır. Örneğin, pandoc ile , oluşturulan ankraj, başlığınızın bir kebap mahfazası olacaktır.

 echo "# Hello, world\!" | pandoc
 # => <h1 id="hello-world">Hello, world!</h1>

Hangi işaretleme ayrıştırıcısını kullandığınıza bağlı olarak, çapa değişebilir (symbolrush ve La muerte Peluda cevaplarının örneklerini alın, farklıdır!). İşaretleme uygulamanıza bağlı olarak oluşturulan çapaları görebileceğiniz bu işarete bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.