идентификаторы jquery с пробелами
кто-нибудь знает, как выбрать элемент в DOM по ID с помощью jQuery, когда этот идентификатор имеет место?
например, идентификатор моего элемента будет
<div id="content Module">Stuff</div>
Как бы я выбрал это с помощью jQuery?
Если я просто делаю
$("#content Module").whatever()
jQuery попытается найти элемент с идентификатором содержимого и идентификатором модуля, который не является тем, что я ищу.
Я должен добавить, что я работаю со старой кодовой базы, где эти два слова идентификаторы широко используются, поэтому прохождение и изменение всех идентификаторов было бы плохо.
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. Этот остаются только требования-помимо того, что они уникальны в документе что значение должно содержать хотя бы один символ (не может быть пустым), и что он не может содержать никаких пробелов.
на всякий случай, если кому-то интересно, я обнаружил, что побег из пространства будет работать, и, вероятно, работает лучше всего. Это особенно полезно, когда у вас нет контроля над целевым DOM (т. е. userscript):
$("#this\ has\ spaces");обратите внимание на двойную обратную косую черту, которая требуется.
метод, предложенный Крисом, вероятно, может быть адаптирован для работы с функциями jQuery.
var element = document.getElementById('content Module'); $(element) ... ;
идея попробовать:
$("#content" + &#032; + "Module").whatever() $("#content" + %20 + "Module").whatever()точка с запятой может вызвать ошибку javascript. Я также рекомендую изменить идентификатор, чтобы не было никаких пробелов.
кроме того, попробовать
document.getElementByID("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