boşluk içeren jquery kimlikleri


127

Kimlikte boşluk varken, jQuery ile DOM'daki bir öğeyi Kimliğe göre seçmeyi bilen var mı?

Örneğin, öğemin kimliği şöyle olacaktır:

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

Bunu jQuery ile nasıl seçerim?

Sadece yaparsam

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

jQuery, aradığım şey olmayan hem içerik kimliğine hem de Modül kimliğine sahip bir öğe bulmaya çalışacaktır.

Bu iki kelime kimliğinin yaygın olarak kullanıldığı eski bir kod tabanıyla çalıştığımı eklemeliyim, bu nedenle tüm kimlikleri gözden geçirmek ve değiştirmek kötü olur.


@ Glavić Tüm ifadeleriniz doğru. Ancak yeni kabul edilen cevap, bu çözüme gerçekten ihtiyaç duyan kişilere daha faydalı olacaktır. Gerçekten sıkışmış olanlar için, gerçekten ihtiyaç duydukları şey boşluklarla nasıl başa çıkacaklarını bilmek.
Jeff Davis

Evet, bu doğru, ancak cevabımın boşluklu kimlikler için de çözümü var, hatta kalın yazılmış;)
Glavić

1
Kimlikler yerine kimlikleri doğru yazmak için oy verin. Üzgünüm evcil hayvan herif. Ve evet, çoğu insan kısaltmalar ve kısaltılmış kelimeleri çoğul kesme işareti kullanmak biliyorum ama bana karşı hala bir bakkalın kesme işareti gibi görünüyor walkinthewords.blogspot.com/2009/05/grocers-apostrophe.html
Juan Mendes

Yanıtlar:


253

Bir öznitelik seçici kullanın.

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

Ya da daha iyisi etiketi de belirtin:

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

$ ['# İd'] 'den farklı olarak, sayfanızda aynı kimliğe sahip birden çok öğeniz varsa, bunun birden çok öğe döndüreceğini unutmayın.


1
Glavic'in cevabı bile en iyi öneridir. sanırım bu cevap sorunu çözdü :)
GusDeCooL

8
Bu bana çok yardımcı oldu. Ajax aracılığıyla korkunç bir HTML'de okuyorum ve HTML'nin yapısı veya kimliklerin biçimi üzerinde hiçbir kontrolüm yok. Kimliklerinde boşluklar var, bu yüzden Elliot'ın cevabı çok yardımcı oluyor, oysa Glavic'in hiçbir yardımı yok.
daybreaker

Teşekkürler, harika cevap!
alcfeoh

62

Boşluk kullanmayın, bunun nedeni basittir, boşluk karakteri ID özelliği için geçerli değildir.

Kimlik simgeleri bir harfle ([A-Za-z]) başlamalıdır ve ardından herhangi bir sayıda harf, rakam ([0-9]), kısa çizgi ("-"), alt çizgi ("_"), iki nokta üst üste gelebilir (":") ve noktalar (".").

Ama standartları umursamıyorsanız deneyin $("[id='content Module']")

Benzer konu> HTML'deki id özniteliği için geçerli değerler nelerdir?

Düzenleme: HTML 4.01 ve HTML5 arasında kimlik farkı nedir?

HTML5, id özniteliğindeki ek kısıtlamalardan kurtulur. Belgede benzersiz olmak dışında kalan tek gereksinim, değerin en az bir karakter içermesi (boş olamaz) ve herhangi bir boşluk karakteri içermemesidir.

Bağlantı: http://mathiasbynens.be/notes/html5-id-class


4
+1. Adlandırma standartlarını takip ettikten sonra, onları takip etmediğiniz zamanlar için geçici çözümler bulmanız gerekmez.
matt b

Bu, geçerli kimliklerim olacak şekilde ekrandaki ikinci kelimeyi kısaltma fikrini tetikledi. Sorunla ilgilendiniz, teşekkürler!
Jeff Davis

1
Burada HTML 4.01 spesifikasyonundan alıntı yapıyorsunuz. Kimlik özellik değerlerinde boşluk karakterlerinin kullanılmasına hala izin verilmese de, HTML5 şu kısıtlamaların çoğundan kurtuluyor
Mathias Bynens

2
Adama eski bir projenin tüm kod tabanını geçip, sırf "standartlar" nedeniyle kırmasını söylemeyin. En fazla, bu bir yorumu derecelendirmelidir, kesinlikle kabul edilen cevap değil :(
Coderer

Komik. Alanlar çoğu amaç için gayet iyi çalışıyor, neden onları standart dışı kılıyor?
Lodewijk

23

Herhangi birinin merak etmesi durumunda, alandan kaçmanın işe yarayacağını buldum. Bu, özellikle hedef DOM üzerinde kontrolünüz olmadığında (örneğin bir kullanıcı yazısının içinden) kullanışlıdır:

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

Gerekli olan çift ters eğik çizgiye dikkat edin.


Ardından, JavaScript'in kendisi başka bir dilde bir dize sabitiyse, en fazla 4 ters eğik çizgi.
Brilliand

2
Diğer dilin kendisi yine başka bir dilde bir dize
sabitiyse

1
Bu, dize yinelemeli olarak kaçtığında yığın taşmasına neden olur
Jeff Davis

7

Chris'in önerdiği yöntem muhtemelen jQuery işlevleriyle çalışmak üzere uyarlanabilir.

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

1
Ahhh! Daha da aşağı kaydırmalıydı!
gotomanners

2

Denenecek bir fikir:

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

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

Noktalı virgül, javascript hatasına neden olabilir. Kimliği boşluk içermeyecek şekilde değiştirmenizi de öneririm.

Ayrıca denemek document.getElementByID("content Module")


1
document.getElementByID bana normal nesneyi verirdi ve sonra aradığım jQuery işlevlerini yapamazdım. Bununla birlikte, benzer koşullarda bu iyi bir çözüm olacaktır.
Jeff Davis

1
Olmaz $(document.getElementByID("content Module"))size bir jquery nesne vermek?
gotomanners

1

Bu benim için çalıştı.

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

0

HTML'de bir ID öznitelik değerinde boşluk olması teknik olarak geçersiz olsa da , aslında jQuery kullanarak bunu seçebilirsiniz.

Bkz. Http://mothereffingcssescapes.com/#content%20module :

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

jQuery, Selectors API benzeri bir sözdizimi kullanır, bu nedenle $('#content\\ module');öğesini kullanarak id="content module".

CSS'de öğeyi hedeflemek için, şu şekilde kaçabilirsiniz:

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

0

bu, öğenin id için tam değere sahip olmasını istiyorsanız işe yarayabilir

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

ancak öğenin bunlardan yalnızca birine sahip olup olmadığını (tıpkı sınıf gibi) diğer kimliklerle veya kimlikler olmadan kontrol etmek istiyorsanız

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

bu, varsa id="content"veya id="content Module"veya veyaid="content Module other_ids"


0

Vakam için kaçışın, boşlukları% 20 ile değiştirdiği için işe yaramadığını buldum. Bunun yerine, örneğin sayfanın h1'ini bir liste öğesinin metni ile değiştirmek için değiştirmeyi kullandım. Menü şunları içeriyorsa:

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

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

0

JQuery'de virgül ve / veya boşluk içeren öğe kimlikleriyle ilgili sorunlar yaşıyordum, bu yüzden bunu yaptım ve harika çalıştı:

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

Bunun boşlukları var ve çalışmıyor:

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

Burada virgül var ve çalışmıyor:

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


0

Seçici üzerindeki herhangi bir çeşitli karakterden (boşluklarla birlikte) kaçış .

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.