Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/467.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法获取元素的偏移量_Javascript_Jquery - Fatal编程技术网

Javascript 无法获取元素的偏移量

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... 此外,

我试图抵消一些对我来说很好的元素。但如果元素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...
此外,我没有访问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());