Javascript 无法获取元素的偏移量
我试图抵消一些对我来说很好的元素。但如果元素id包含单引号,则会出现问题。它会抛出一个错误,例如,如果元素id为whats_,则其工作正常。 但是如果id是,如果给了我一个错误,那么下一步是什么呢Javascript 无法获取元素的偏移量,javascript,jquery,Javascript,Jquery,我试图抵消一些对我来说很好的元素。但如果元素id包含单引号,则会出现问题。它会抛出一个错误,例如,如果元素id为whats_,则其工作正常。 但是如果id是,如果给了我一个错误,那么下一步是什么呢 Error: Syntax error, unrecognized expression: #What's_Next ....value:null},t.error=function(e){throw new Error("Syntax error, unrecognized exp... 此外,
Error: Syntax error, unrecognized expression: #What's_Next
....value:null},t.error=function(e){throw new Error("Syntax error, unrecognized exp...
此外,我没有访问HTML的权限,我无法更改HTML。你们有什么解决办法吗
这是我的密码:
$('.custom-toc li a').click(function(){
var id = $(this).attr('href');
console.log(id);
console.log($(id).offset());
});
我正在单击的元素的HTML:
<a rel="internal" href="#What's_Next">What's Next</a>
元素偏移元素的HTML:
<span id="What's_Next"></span>
<h4 class="editable">What's Next2</h4>
接下来是什么
您不能在div的id中使用
符号-您应该更改
<span id="What's_Next"></span>
到
编辑:
因为您不能/不想更改div的id,所以您正在处理一个无效代码。您应该首先考虑调试它以进一步工作。< /P>
编辑2:
感谢@Tibrogargan的评论,我已经检查了w3c的建议,他可能是对的:
id=id元素的唯一标识符。绝对不能有
文档中具有相同id值的多个元素。任何
字符串,但有以下限制:
- 必须至少有一个字符长
- 不能包含任何空格字符
来源:您可以使用replace()
HTML:
您是否尝试过使用id作为属性的方法
像这样:
var id = "What's Next";
var elem = $("span[id="+id+"]");
嗯,我试过了,但没用:)-Cudos对Garvit说,他说得对,这是他的解决方案(只是简化了):
这里有另一种不转义引号的方法,尽管它要求您从href前面删除散列(而且,使用$(“*”)很慢)
你也可以共享html吗?这是因为你的href中有'
符号,所以你得到的错误'
不是id
属性的有效字符,所以你应该通知提供html的人他们需要修复它。尝试像这样转义它。替换(/([#&,.+*~\':“!^$[]()=>\/@])/g,\\$1')。看到了吗?我不能通过html访问我不能像这样更改id,我也不想用jquery更改id。@ofcapl我相信HTML5中的id中可以使用引号。我已经更新了我的答案-谢谢你提到这一点-我还没有意识到现在它可以是有效的(?)syntaxSo基本上用前导反斜杠+字符替换每个特殊字符…就像jquery常见问题解答暗示的那样:我不知道为什么它停止在#replace i have remove#中工作。我希望它不会导致任何错误future@Nils是的,但是试图在regex中逃避任何东西的人可以在应用jqu之前这样做所有定义的字符都不起作用,我已经尝试过这个获取未定义的偏移量
<div class="custom-toc">
<ul>
<li>
<a href="#What's_Next">dddfs</a>
</li>
</ul>
</div>
<span id="What's_Next">hello</span>
<h4 class="editable">What's Next2</h4>
$('.custom-toc li a').click(function(){
var id = $(this).attr('href').replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1');
console.log(id);
console.log($(id).offset());
});
var id = "What's Next";
var elem = $("span[id="+id+"]");
var id = $(this).attr('href');
console.log(id);
id = id.replace("'","\\'");
console.log($("#"+id).offset());
$('.custom-toc li a').click(function() {
var href = $(this).attr('href').substring(1);
var a = $("*").filter(
function(index) {
return $(this).attr('id') == href;
}
);
console.log($(a[0]).offset());