идентификаторы jquery с пробелами



кто-нибудь знает, как выбрать элемент в DOM по ID с помощью jQuery, когда этот идентификатор имеет место?



например, идентификатор моего элемента будет



<div id="content Module">Stuff</div>


Как бы я выбрал это с помощью jQuery?



Если я просто делаю



$("#content Module").whatever() 


jQuery попытается найти элемент с идентификатором содержимого и идентификатором модуля, который не является тем, что я ищу.



Я должен добавить, что я работаю со старой кодовой базы, где эти два слова идентификаторы широко используются, поэтому прохождение и изменение всех идентификаторов было бы плохо.

500   11  

11 ответов:

используйте селектор атрибутов.

$("[id='content Module']").whatever();

или, лучше, укажите тег, а также:

$("div[id='content Module']").whatever();

обратите внимание, что в отличие от $('#id'), это вернет несколько элементов, если у вас есть несколько элементов с одинаковым идентификатором на Вашей странице.

Не используйте пробелы, причина этого проста, символ пробела не является допустимым для атрибута ID.

маркеры ID должны начинаться с буквы ([A-Za-z]) и может сопровождаться любым количество букв, цифр ([0-9]), дефисы ( " - " ), подчеркивания ("_"), двоеточия ( " :") и точки (".").

но если вы не заботитесь о стандартах попробовать $("[id='content Module']")

Как нить > какие допустимые значения для атрибута id в HTML?

Edit:как id отличается между HTML 4.01 и HTML5

HTML5 избавляется от дополнительных ограничений на атрибут id. Этот остаются только требования-помимо того, что они уникальны в документе что значение должно содержать хотя бы один символ (не может быть пустым), и что он не может содержать никаких пробелов.

ссылка: http://mathiasbynens.be/notes/html5-id-class

на всякий случай, если кому-то интересно, я обнаружил, что побег из пространства будет работать, и, вероятно, работает лучше всего. Это особенно полезно, когда у вас нет контроля над целевым DOM (т. е. userscript):

$("#this\ has\ spaces");

обратите внимание на двойную обратную косую черту, которая требуется.

метод, предложенный Крисом, вероятно, может быть адаптирован для работы с функциями jQuery.

var element = document.getElementById('content Module');
$(element) ... ;

идея попробовать:

$("#content" + &amp;#032; + "Module").whatever()

$("#content" + %20 + "Module").whatever()

точка с запятой может вызвать ошибку javascript. Я также рекомендую изменить идентификатор, чтобы не было никаких пробелов.

кроме того, попробовать document.getElementByID("content Module")

это сработало для меня.

document.getElementById(escape('content Module'));

пока технически недопустимо иметь пробел в значении атрибута ID в HTML, вы можете выбрать его с помощью jQuery.

см.http://mothereffingcssescapes.com/#content%20module:

<script>
  // document.getElementById or similar
  document.getElementById('content module');
  // document.querySelector or similar
  $('#content\ module');
</script>

jQuery использует API-подобный синтаксис селекторов, поэтому вы можете использовать $('#content\ module'); выбрать элемент с id="content module".

чтобы нацелить элемент в CSS, вы можете избежать его следующим образом:

<style>
  #content\ module {
    background: hotpink;
  }
</style>

это может работать, если вы хотите, чтобы элемент имел точное значение для id

$("[id='content Module']").whatever();

а если вы хотите проверить, если элемент имеет только один из них ( как класс ) С или без других идентификаторов

$("[id~='content']").whatever();

это позволит выбрать элемент, если он имеет id="content" или id="content Module" или id="content Module other_ids"

Я нашел для своего случая, что escape не работает, потому что он заменяет пробелы на %20. Я использовал replace вместо этого, например, чтобы заменить h1 страницы текстом элемента списка. Если меню содержит:

<li id="Contact Us"\>Contact Us</li>

function setTitle(menu) {
    $("h1").text( $("li#" + menu.replace(" ", "\ ")).text() );
}

у меня были проблемы с идентификаторами элементов, содержащими запятые и / или пробелы в jQuery, поэтому я сделал это, и это сработало как шарм:

var ele = $(document.getElementById('last, first'));

это имеет пробелы и не работает:

var ele = $('#last, first');

это имеет запятую и не работает:

var ele = $('#last,first');

экранирование любого другого символа на селекторе (вместе с пробелами).

var escapeSelector = function(string) {
  string = string||"";
  if (typeof string !== 'string') return false;
    return string.replace( /(:|\.|\[|\]|,|=|@|\s|\(|\))/g, "\" );

}
console.log($("div[data-id="+escapeSelector("Document (0).json")+"]").text());   
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div data-id="Document (0).json">Howdy</div>

Comments

    Ничего не найдено.