2016-05-18 5 views
2

Я пытаюсь получить смещение некоторых элементов, которые отлично работают для меня. Но проблема возникает, если идентификатор элемента содержит одинарные кавычки. Он выдает ошибку, например, если идентификатор элемента - это то, что не работает. Но если id - это what's_next, если я дал мне ошибку.Невозможно получить смещение элемента

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> 
+2

вы также можете поделиться html? –

+0

Это из-за символа '' 'в вашем href, что вы получаете ошибку. – MiltoxBeyond

+1

' '' не является допустимым символом для атрибута 'id', поэтому вы должны сообщить кому-нибудь, кто предоставляет HTML-код, который им нужно исправить. –

ответ

2

Вы можете избежать ' с использованием replace()

HTML:

<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> 

JS:

$('.custom-toc li a').click(function(){ 
    var id = $(this).attr('href').replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g,'\\$1'); 
    console.log(id); 
    console.log($(id).offset()); 
}); 
+0

Итак, вы в основном заменяете каждый особый символ ведущим обратным слэшем + символом ... это похоже на этот jquery faq: https://learn.jquery.com/using-jquery-core/faq/how-do-i-select-an-element-by-an-id-that-has-characters-used-in-css-notation/ – Nils

+0

i don Не знаю, почему он перестает работать в # replace, мне пришлось удалить # из шаблона регулярных выражений. я надеюсь, что это не вызовет каких-либо ошибок в будущем. –

+0

Да, правильно, это тоже ускользает. Я обновляю его –

-1

Вы не можете использовать ' символ внутри вашего div's id - Вы должны изменить

<span id="What's_Next"></span> 

в

<span id="Whats_Next"></span> 

EDIT:

, потому что Вы не можете/не хотите, чтобы изменить идентификатор Div в Вы работаете на недействительный код. Вы должны сначала отладить его, чтобы продолжить работу.

EDIT 2:

Благодаря @Tibrogargan комментарий Я проверил рекомендации w3c, и он, вероятно, прав:

ID = ID Уникальный идентификатор для элемента. Не должно быть несколько элементов в документе с одинаковым значением id. Любая строка, со следующими ограничениями:

  • должен быть по крайней мере один символ длиной
  • не должен содержать пробелы

Источник: w3c.org

+0

У меня нет доступа к html, я не могу изменить идентификаторы например, я тоже не хочу менять id с помощью jquery. –

+0

@ofcapl Я считаю, что кавычки приемлемы в id в HTML5. – Tibrogargan

+0

Я обновил мой ответ - спасибо за упоминание об этом - я не понял, что теперь это может быть допустимый синтаксис (?) – mrmnmly

0

Вы пробовали идти для идентификатора в качестве атрибута подход?

Как это:

var id = "What's Next"; 
var elem = $("span[id="+id+"]"); 

Ну я попробовал, и это не работает :) - Cudos к Garvit, он это право, это его решение (только упрощенный):

var id = $(this).attr('href'); 
    console.log(id); 
    id = id.replace("'","\\'"); 
    console.log($("#"+id).offset()); 
+0

не работает только сейчас, я пробовал это получить неопределенное смещение –

0

Вот еще один способ сделать это, не избежать цитаты, хотя она требует от вас, чтобы удалить хэш из передней части HREF (а также, используя $ («*») медленно)

$('.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()); 
Смежные вопросы