降价中的交叉引用(命名锚点)

Syn*_*sso 471 html anchor markdown cross-reference

是否有相应的markdown语法:

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

... 

<a name="pookie">this is pookie</a>
Run Code Online (Sandbox Code Playgroud)

Ste*_*ell 630

Take me to [pookie](#pookie)
Run Code Online (Sandbox Code Playgroud)

应该是正确的markdown语法跳转到名为pookie的锚点.

要插入该名称的锚点,请使用HTML:

<a name="pookie"></a>
Run Code Online (Sandbox Code Playgroud)

Markdown似乎并不介意你把锚点放在哪里.放在标题中的一个有用的地方.例如:

### <a name="tith"></a>This is the Heading
Run Code Online (Sandbox Code Playgroud)

效果很好.(我在这里演示但是SO的渲染器剥离了锚.)

关于自闭标签和id=对比的注意事项name=

这篇文章的早期版本建议使用<a id='tith' />XHTML的自关闭语法,并使用id属性而不是name.

XHTML允许任何标记为"空"和"自闭".也就是说,<tag />对于<tag></tag>一对带有空体的匹配标签来说,它是简称.大多数浏览器都会接受XHTML,但有些浏览器不接受.为避免跨浏览器问题<tag></tag>,请按照上面的建议使用显式关闭标记.

最后,该属性name=在XHTML中已弃用,因此我最初使用id=,每个人都认可.但是,HTML5现在在使用时会在JavaScript中创建一个全局变量id=,这可能不一定是您想要的.因此,使用name=现在可能更友好.

(感谢SLIPP道格拉斯解释XHTML我,钉枪的指出了HTML5的副作用-看到的评论和钉枪答案.更多的细节name=出现在各处都起作用,但它是在XHTML弃用.)

  • @Slipp:好的,我想我明白了.您编写了"<a id="hi"/>其余的doc",但它被视为"<a id="hi">其余文档</a>".(并且页面的元素分析也显示了这一点.)我的错误:我查看了显示的元素而不是原始源.根据这一观察,你认为应该修改答案吗? (4认同)
  • `name`属性也会创建全局变量(参见http://stackoverflow.com/questions/3434278/do-dom-tree-elements-with-ids-become-global-variables),所以你不妨使用` id`属性作为片段标识符URL的目标,如预期的那样. (3认同)
  • 在 StackOverflow 呈现 HTML 之后,您无法看到如何链接到您的标题演示,因为它们的呈现正在剥离您的 _&lt;a&gt;_ 标签。也就是说,你不能在 StackOverflow Markdown 中。 (2认同)
  • 但是,这将适用于其他更自由的Markdown渲染器,但是您需要关闭_ <a> _标签; _ _a> _标签不允许自动关闭.此外,我发现我的浏览器跳过标题,除非_ <a> _标记在标题的内容之前._对你的例子进行了修改._ (2认同)
  • 坚持到那里,牛仔.仅仅因为没有href的`<a>`没有任何样式并不意味着它自动关闭.除非我完全疯狂,所以这两个:[test-xhtml11](http://sln.6bitt.com/public/test-xhtml11.html)和[http://sln.6bitt.com/public/ test-html5.html](test-html5)在<a>标签内呈现页面的其余部分.继续前进,并与您选择的网络检查员进行检查. (2认同)

La *_*uda 73

在bitbucket.org上,投票的解决方案不起作用.相反,当使用标头(带##)时,可以通过将它们作为#markdown-header-my-header-name加前缀来引用它们作为锚点,其中#markdown-header-是由渲染器生成的隐式前缀,并且其余的是较低的标题标题,用破折号代替空格.

## My paragraph title
Run Code Online (Sandbox Code Playgroud)

会产生这样的隐式锚点

#markdown-header-my-paragraph-title
Run Code Online (Sandbox Code Playgroud)

每个锚引用之前的整个URL是可选的,即

[Some text](#markdown-header-my-paragraph-title)
Run Code Online (Sandbox Code Playgroud)

相当于

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

只要它们在同一页面中.

资料来源:https://bitbucket.org/tutorials/markdowndemo/overview(编辑此.md文件的来源,看看如何制作锚点).

  • 在Github中,`## My paragraph title`将生成以下锚'user-content-my-paragraph-title`,因此您可以使用[Some text](#user-content-my-paragraph-title)引用它.但是,我还没有找到官方文档. (8认同)
  • 这是有用的信息;谢谢你。但是,没有扩展的降价渲染器不会为您生成这些锚点,并且标题名称冲突会导致锚点 ID 冲突(或一些无用的区分技巧,例如数字就足够了)。显式锚点 id 更好、更可控,不会因文本更新而随机更改(参见上面的技巧),并且不仅可以用于锚定标题,还可以用于锚定。这两种技术一般都需要。 (2认同)

mik*_*ana 62

用一个name.id在HTML 5中使用a 不是必需的,并且将在JavaScript中创建全局变量

看到HTML 5规范,5.9.8导航到片段标识符 -既idname被使用.

重要的是要知道大多数浏览器仍将ID转换为全局变量.这是一个快速测试.使用name避免创建全局变量以及可能导致的任何冲突.

使用名称的示例:

Take me to [pookie](#pookie)
Run Code Online (Sandbox Code Playgroud)

目的地锚点:

### <a name="pookie"></a>Some heading
Run Code Online (Sandbox Code Playgroud)

  • @ MarnenLaibow-Koser许多库(即,不是你自己的JS,但是其他人的)使用单个全局 - 例如,fineuploader.如果你创建一个ID为"fineuploader"的元素,你将无法使用`fineuploader`模块.避免创建不必要的全局变量有助于避免这些冲突. (13认同)
  • @ MarnenLaibow-Koser没有人在讨论在JS中定义全局变量.**在HTML中创建ID会在大多数浏览器中创建一个全局window.someid.** (8认同)
  • Downvoting.全局变量参数很弱,因为您不应该(直接)在JS中定义全局变量,因此不会发生冲突.此外,`name`和`id`的语义不同. (5认同)
  • 我有兴趣对该案例进行一些测试,并找出哪一个优先.我理解这个理论问题,但是在多年的客户端开发中,我从来没有一个ID中断任何客户端JS(假设HTML是有效的).我会继续使用它们,因为它们在语义上是合适的,直到遇到实际问题. (5认同)
  • @ MarnenLaibow-Koser我(以及其他许多人)使用HTML ID打破真正的JavaScript - 在你回复的评论中有一个非常实用的例子!有许多风格和公司总是使用类,即使对于单身人士,这就是原因. (2认同)
  • "'将此<script>放入'通常不会污染全局命名空间"测试流行的库显示它们 - 看到`window.Stripe``window.olark`和`window.twttr`.更多信息,请访问http://www.2ality.com/2012/08/ids-are-global.html (2认同)
  • @ MarnenLaibow-Koser同意.此外,[HTML id的语法](https://www.w3.org/TR/html4/types.html#type-id)允许包含连字符,冒号和点的id值,其使用将无法将ID转换为变量名称,全局与否. (2认同)

You*_*You 16

在原始Markdown语法中没有现成的语法可用,但Markdown Extra提供了一种至少为标题分配ID的方法 - 然后您可以轻松链接到标题.另请注意,您可以在Markdown和Markdown Extra中使用常规HTML,并且该name属性已被id更新版本的HTML中的属性取代.


key*_*oxy 14

对于在 GitBook 中寻找此问题解决方案的任何人。这就是我让它工作的方式(在 GitBook 中)。您需要明确标记您的标题,如下所示:

# My Anchored Heading {#my-anchor}
Run Code Online (Sandbox Code Playgroud)

然后像这样链接到这个锚点

[link to my anchored heading](#my-anchor)
Run Code Online (Sandbox Code Playgroud)

可以在此处找到解决方案和其他示例:https : //seadude.gitbooks.io/learn-gitbook/


jef*_*ill 11

Markdown Anchor支持hashmark,因此页面中锚点的链接就是这样[Pookie](#pookie)

Gruber Markdown实际上不支持生成锚点,但在其他实现中,例如Markdown Extra.

在Markdown Extra中,锚ID附加到标题或子标题上{#pookie}.

Git存储库页面中的Github Flavored Markdown(但不在Gists中)自动生成在所有头文件(h1,h2,h3等)上带有多个标记标记的锚点,包括:

  • id="user-content-HEADERTEXT"
  • class="anchor"
  • href="#HEADERTEXT"
  • aria-hidden="true" (这是针对鼠标悬停时显示的svg链接图标)

当一个人写道时,排除aria/svg图标:

  • # Header Title

Github生成:

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

因此,创建标题链接无需任何操作,并且始终可以使用以下链接链接到它们:

  • 链接到 [Header Title](#header-title)

  • 这对我有用。`[标题标题](#header-title)` (2认同)

imz*_*hev 9

正如我们(从答案中)看到的,没有标准的方法;不同的降价处理器在提供这种可能性的降价扩展方面会有所不同。

\n

使用 pandoc,你可以得到你想要的东西,如下所示:

\n
Take me to [pookie](#pookie)\n\n...\n\n[this is pookie]{#pookie}\n
Run Code Online (Sandbox Code Playgroud)\n

这给出(使用 pandoc-2.9.2.1):

\n
<p>Take me to <a href="#pookie">pookie</a></p>\n<p>\xe2\x80\xa6</p>\n<p><span id="pookie">this is pookie</span></p>\n
Run Code Online (Sandbox Code Playgroud)\n

还可以创建一个带有锚点 id 的空范围:

\n
Take me to [pookie](#pookie)\n\n...\n\nthis is pookie []{#pookie}\n
Run Code Online (Sandbox Code Playgroud)\n

这会产生:

\n
<p>Take me to <a href="#pookie">pookie</a></p>\n<p>\xe2\x80\xa6</p>\n<p>this is pookie <span id="pookie"></span></p>\n
Run Code Online (Sandbox Code Playgroud)\n

除此之外,对于 pandoc 和最常见的 Markdown 生成器,每个 header 中都有一个简单的自生成锚点。(请参阅此处的答案和其他答案,了解(自动)生成和引用此类锚点的便捷方法。)

\n


Uly*_* BN 7

对于最常见的降价生成器。每个标题中都有一个简单的自生成锚点。例如,使用pandoc,生成的锚点将是标题的烤肉串。

 echo "# Hello, world\!" | pandoc
 # => <h1 id="hello-world">Hello, world!</h1>
Run Code Online (Sandbox Code Playgroud)

根据您使用的降价解析器,锚点可以改变(以symbolrush 和La muerte Peluda 的答案为例,它们是不同的!)。请参阅此babelmark,您可以在其中查看根据您的降价实现生成的锚点。


sym*_*ush 6

晚会晚了,但我认为与之合作的人可能会有所帮助rmarkdown。在rmarkdown有内置在你的文档中引用头支持。

定义的任何标头

# Header
Run Code Online (Sandbox Code Playgroud)

可以被引用

get me back to that [header](#header)
Run Code Online (Sandbox Code Playgroud)

以下是.rmd显示此行为的最小独立文件。可以编织到.pdf.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).
Run Code Online (Sandbox Code Playgroud)


小智 6

使用最新的 Markdown,您应该能够使用以下语法:

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

这应该创建以下 HTML:

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

如果您希望锚具有文本,只需在方括号内添加锚文本:

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

  • 不存在“最新降价”之类的东西。它有多种实现/方言。 (3认同)
  • 似乎只有 `Maruku` 知道这种语法。[见 babelmark。](https://johnmacfarlane.net/babelmark2/?text=%5B%5D()%7B%3Aname%3D%27anchorName%27%7D%0A%0Ahey%7B%3Aname%3D%27heyAnchor %27%7D%0A) (2认同)

小智 5

对于任何喜欢使用不同级别标头的人来说,值得注意的是,#无论标头的级别如何,标头的链接都应该只使用单个 :

# This is an H1
## This is an H2
### This is an H3
...
[Take me to H3](#this-is-an-H3)
[Take me to H1](#this-is-an-H1)
[This won't work](##-this-is-an-H2)
Run Code Online (Sandbox Code Playgroud)