จะทราบได้อย่างไรว่า div มี id เฉพาะใน jQuery


266

ฉันมีฟังก์ชั่นที่ต่อท้าย<div>องค์ประกอบให้กับการคลิก nameฟังก์ชั่นได้รับข้อความขององค์ประกอบคลิกและกำหนดมันให้กับตัวแปรที่เรียกว่า ตัวแปรนั้นจะถูกใช้เป็น<div> idองค์ประกอบต่อท้าย

ฉันต้องดูว่า<div> idมีnameอยู่แล้วก่อนที่ฉันจะผนวกองค์ประกอบ แต่ฉันไม่ทราบวิธีการค้นหานี้

นี่คือรหัสของฉัน:

$("li.friend").live('click', function() {
  name = $(this).text();

  // if-statement checking for existence of <div> should go here
  // If <div> does not exist, then append element
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");

  // Else
    alert('this record already exists');
});

นี้ดูเหมือนว่าตรงไปตรงสวย แต่ฉันได้รับข้อผิดพลาด“ คาดหวังจุดสิ้นสุดของไฟล์ขณะที่การค้นหาชื่อชั้น” ฉันไม่รู้ว่ามันหมายความว่าอะไร

if (document.getElementById(name)) {
  $("div#" + name).css({bottom: '30px'});
} else {
  $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
}

มีอะไรเพิ่มเติมคือฉันต้องการที่จะสามารถลบองค์ประกอบนี้ถ้าฉันปิดมันซึ่งควรจะลบออกdiv id [name]จากเอกสาร แต่.remove()ไม่ได้ทำ

นี่คือรหัสสำหรับที่:

$(".mini-close").live('click', function(){
  $(this).parent().remove();
});

ฉันเพิ่มลง.mini-closeในฟังก์ชั่นผนวกตอนเป็นลูก.labelsดังนั้นจึงมีวิธีการปิดการผนวก<div>ถ้าจำเป็น หลังจากคลิก.mini-closeและพยายามที่จะคลิกชื่อเดิมอีกครั้งจากli.friendsนั้นก็ยังพบdiv id [name]และส่งกลับส่วนแรกของifคำสั่งของฉัน


จุดสิ้นสุดของไฟล์ที่ไม่คาดคิดมักเกิดจากความผิดพลาดทางไวยากรณ์ $("div#" + name).css({bottom: '30px'});มันผิดมันควรจะเป็น$("div#" + name).css('bottom', '30px');
Jay Irvine

ลบ () แยกองค์ประกอบออกจากแผนผัง DOM แต่ไม่ทำลายมันดังนั้นการค้นหาด้วย ID จะยังคงค้นหาอยู่หากคุณกำหนดให้กับตัวแปรมันจะยังคงอยู่ที่นั่น ฯลฯ วิธีแก้ปัญหาที่นี่คือถ้าคุณ หาได้แล้วต่อท้าย div ที่ถูกต้อง (ถ้ามีอยู่แล้วจะไม่มีอะไรเกิดขึ้นถ้ามันถูกถอดออก / มันจะปรากฏขึ้นอีกครั้ง) ถ้าไม่พบก็ให้สร้างมันขึ้นมา
Jay Irvine

คำตอบ:


539

คุณสามารถใช้.lengthหลังจากตัวเลือกเพื่อดูว่ามันตรงกับองค์ประกอบใด ๆ เช่นนี้:

if($("#" + name).length == 0) {
  //it doesn't exist
}

เวอร์ชันเต็ม:

$("li.friend").live('click', function(){
  name = $(this).text();
  if($("#" + name).length == 0) {
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");
  } else {
    alert('this record already exists');
  }
});

หรือเวอร์ชันที่ไม่ใช่ jQuery สำหรับส่วนนี้ (เนื่องจากเป็น ID):

$("li.friend").live('click', function(){
  name = $(this).text();
  if(document.getElementById(name) == null) {
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");
  } else {
    alert('this record already exists');
  }
});

98
jQuery มากมายในส่วนที่ไม่ใช่ jQuery: p
jAndy

@Nick - นี่ใช้ไม่ได้สำหรับฉัน ในขณะที่การแก้ไขปัญหาฉันแจ้งเตือนความยาวของ div id ของ [ชื่อ] แต่มันไม่เคยพบมัน
sadmicrowave

8
การตรวจสอบ == 0 ไม่จำเป็นถ้า ($ ("#" + ชื่อ). ความยาว) {} ใช้งานได้ดี
ScottE

3
@ScottE - นั่นคือสิ่งที่ตรงกันข้ามคุณหมายถึง!$("#"+name).length):)
Nick Craver

1
ฉันคิดว่าคุณควรจะทำแทนการเลื่อย=== ==
danger89

66

คำตอบของนิคตอกย้ำมัน คุณยังสามารถใช้ค่าส่งคืนของ getElementById โดยตรงเป็นเงื่อนไขของคุณแทนที่จะเปรียบเทียบกับ null (ใช้งานได้ทั้งสองทาง แต่โดยส่วนตัวแล้วฉันพบว่าสไตล์นี้อ่านง่ายขึ้นเล็กน้อย):

if (document.getElementById(name)) {
  alert('this record already exists');
} else {
  // do stuff
}

คุณพูดถูกมันใช้งานได้ดีมาก (ฉันคงทำเรื่องโง่ ๆ ) อย่างไรก็ตามเมื่อฉันแทนที่การแจ้งเตือน () ด้วยสิ่งอื่นฉันได้รับข้อผิดพลาดว่า: "จุดสิ้นสุดไฟล์ที่ไม่คาดคิดขณะค้นหาชื่อคลาส" ทำไมสิ่งนี้จึงเกิดขึ้น ดู OP ของฉันสำหรับสิ่งที่ฉันกำลังเปลี่ยนฟังก์ชั่น alert () ด้วย ...
sadmicrowave

มีแนวคิดเพิ่มเติมจากใครอีกบ้าง
sadmicrowave

2
ข้อผิดพลาดดูเหมือนว่าคุณไม่มีวงเล็บเหลี่ยมหรือเซมิโคลอน
Rikki

@Philo จะเป็นอย่างไรหากคุณต้องการจับคู่รหัสเฉพาะที่จัดขึ้นในอาร์เรย์ให้กับ
Beaniie

คุณมีหลาย ID ในอาร์เรย์และคุณต้องการค้นหาแต่ละรหัสหรือไม่ วิธีเดรัจฉานบังคับจะวนซ้ำอาร์เรย์และเรียกใช้ getElementById สำหรับแต่ละอัน
philo

31

ลองตรวจสอบความยาวของตัวเลือกถ้ามันคืนคุณบางอย่างแล้วองค์ประกอบจะต้องไม่มีอยู่จริง

if( $('#selector').length )         // use this if you are using id to check
{
     // it exists
}


if( $('.selector').length )         // use this if you are using class to check
{
     // it exists
}

ใช้เงื่อนไขข้อแรกสำหรับ id และเงื่อนไขข้อที่ 2 สำหรับคลาส



10
if ( $( "#myDiv" ).length ) {
    //id id ( "#myDiv" ) is exist this will perform
    $( "#myDiv" ).show();

}

อีกวิธีชวเลข:

    $( "#myDiv" ).length && $( "#myDiv" ).show();

มันเป็นเพียงตัวอย่างในฟังก์ชั่น if ถ้ามีสิ่งใดที่สามารถเขียนได้เมื่อ id ("#myDiv") มีอยู่ซึ่งจะทำงาน
Sanjib Debnath

5

คุณสามารถตรวจสอบโดยใช้ jquery เช่นนี้:

if($('#divId').length!==0){
      Your Code Here
}

1
ถ้า (.! $ ( '# divId') ความยาว = 0) {รหัสของคุณที่นี่} นี้จะถูกต้อง
Santosh

4

วิธีที่ง่ายที่สุดคือ ..

if(window["myId"]){
    // ..
}

นี่เป็นส่วนหนึ่งของข้อกำหนด HTML5: https://www.w3.org/TR/html5/single-page.html#accessing-other-browsing-contexts#named-access-on-the-window-object

window[name]
    Returns the indicated element or collection of elements.

สิ่งนี้ดูดี แต่ตอนนี้มีโน้ตw3.org/TR/html5/…ว่า "การพึ่งพาสิ่งนี้จะทำให้รหัสเปราะ"
Kivi Shapiro

3

นี่คือฟังก์ชั่น jQuery ที่ฉันใช้:

function isExists(var elemId){
    return jQuery('#'+elemId).length > 0;
}

นี่จะคืนค่าบูลีน หากองค์ประกอบมีอยู่ก็จะส่งกลับจริง หากคุณต้องการเลือกองค์ประกอบตามชื่อคลาสเพียงแทนที่#ด้วย.


2

คุณสามารถจัดการกับมันได้หลายวิธี

วัตถุประสงค์คือเพื่อตรวจสอบว่า div มีอยู่แล้วเรียกใช้งานโค้ด ง่าย

เงื่อนไข:

$('#myDiv').length

บันทึก:

#myDiv -> < div id='myDiv' > <br>
.myDiv -> < div class='myDiv' > 

นี่จะส่งกลับตัวเลขทุกครั้งที่มีการดำเนินการดังนั้นหากไม่มี div มันจะให้ศูนย์ [0] และเนื่องจากเราไม่มี 0 สามารถแสดงว่าเป็นเท็จในไบนารีดังนั้นคุณสามารถใช้มันในถ้าคำสั่ง และคุณสามารถใช้มันเป็นการเปรียบเทียบกับตัวเลขที่ไม่มี ในขณะที่มีสามคำให้ด้านล่าง

// Statement 0
// jQuery/Ajax has replace [ document.getElementById with $ sign ] and etc
// if you don't want to use jQuery/ajax 

   if (document.getElementById(name)) { 
      $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

// Statement 1
   if ($('#'+ name).length){ // if 0 then false ; if not 0 then true
       $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

// Statement 2
    if(!$('#'+ name).length){ // ! Means Not. So if it 0 not then [0 not is 1]
           $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>"); 
    }
// Statement 3
    if ($('#'+ name).length > 0 ) {
      $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

// Statement 4
    if ($('#'+ name).length !== 0 ) { // length not equal to 0 which mean exist.
       $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

1

ใส่รหัสที่คุณต้องการตรวจสอบใน jquery เป็นวิธีการ

var idcheck = $("selector").is("#id"); 

if(idcheck){ // if the selector contains particular id

// your code if particular Id is there

}
else{
// your code if particular Id is NOT there
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.