-
Notifications
You must be signed in to change notification settings - Fork 40
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
修复因同一页面 H[1-3] 标签名称一样导致锚点链接一样,使锚链接定位失败的bug #6
Conversation
提交的实现还是有bug: 那么问题就来了: 有可能写作的时候手动增加了序号,现在提交的方式就有问题了:如:
针对此问题,所以我在想:是不是应该增加一个配置选项 如果标题有重复导致锚链接定位不准确,自动改写锚链接id。实现方式:
我暂时是这样的想法。你觉得如何。 @yuan1994 |
@zq99299 这样不太妥,你还得再加一个配置项,而且如果用户忘了加,那么就会出现锚链接混淆,如果加了这个配置项,那么就把锚链接重写了,何必不直接重写,这样就不会出现锚链接混淆问题,至于你说的那种锚链接里有 【1-2-1.2 标题】这种情况,确实会导致bug,可以使用正则将不能出现在锚链接里的字符串给替换为空字符串,GitHub的README文件里的锚链接就是这样处理的,这样就变成了 【1-2-12标题】 ,这样就彻底解决你说的这种特殊情况下的bug了,你看如何 |
这是我在你的项目里的README文件里复制的,GitHub就是将 . 删掉,将其他字符换成-,我们可以将不合法字符串全部替换成空字符串或者-,当然我认为-不安全,因为和自动添加的 1-1可能冲突 |
@yuan1994 也可以。你是前端工程师吗?我前端不太好。 不合法的可以替换。那加什么才能不和自动重写的序号 冲突呢。 |
如果用1-1-1 这种的替换 就有可能和重写的 冲突了。看起来就很难看了 |
嗯,这个我来解决,我将不合法字符串删掉吧 我不是前端工程师,我前端后台服务器都会点,主要是做PHP |
JavaScript 的正则非常强大,比 PHP 还有 Shell 强大多了 |
好把。我主要是java的。正则我太弱。 那就看加什么才能不和重写的区分开了 |
嗯,直接删掉吧,或者下划线?要不下划线吧,不和中划线混淆,也能分隔开字符串 |
ID111_原始标题 这样呢 |
ID111_处理后的原始标题 (不合法字符串删掉) |
下划线是合法字符串,不影响,像 #?!. 这样的不合法,全部替换成_,这样可以保留原来的格式,不会让文字连在一起 |
嗯可以。 不是还是有重复的标题导致锚定位不正确来着。还是采用你那种吧,前缀这样组合: |
这样不行,h1, h2, h3 必须分割开,不然就出现了 h1-11, h2-1 与 h1-1, h2-1, h3-1 重复了,还是用中划线隔开吧,前缀 ID 显得多余,然后对不合法的字符串进行处理后,不可能出现重复的锚链接 |
我纠结的是:1-1-1-1.1. xxx 那前面为了不重复增加的序号 中间就不加中华线了: 111_1.1.标题 |
有两种情况:
|
这是我刚刚测试的结果,都是我们多虑了,这些特殊字符串不用考虑,浏览器为我们解决了,自动把 |
我明白了。 是那个lib包自动转换了。 那现在的问题还是如何让id唯一的问题了 |
嗯,你说的那种情况有,不过没有人会在标题里加上 1-2这样的吧,顶多有加 1.1 这样的, 1.1 这样的被浏览量解析时替换了 |
如果你一定要考虑这种情况,那就在取id时将原来的序号最后面加两个-,这样就变成了1-1--标题,如果用户自己偏要加【1-1 标题】,那生成的锚链接也是 【1-1--1-1-标题】啊 |
1-1-1_原始标题 这样吧 |
这样造不出重复的锚链接了吧 |
都行,那我改下,最后一个分隔符改成_ |
是不是这样可以了?可以了我就 pull request 了 |
嗯嗯 可以的。 |
这下完美了吧,哈哈 |
npm 已升级到 0.2.7 |
下述文字表示锚链接的id,不是标题,不会对标题做任何改动
修改前:
此时第一个返回值与第二返回值的锚链接一样都是返回值,如果点第二个页面会定位到第一个
修改后:
修改后两个返回值的锚链接不一样,可以准确定位