4

How can I find an element having an email address as class name. Email address is dynamic.

$(document).ready(function(){
  //not working getting error
  var email="abc@gmail.com";
  $("#main").find("."+email);
  //not working
  $("#main").find("."+escapeSelecorchars(email));
});

function escapeSelecorchars = function(val) {
  return val.replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g,"\\\\$&");
};
<div id="main">
  <div class="abc@gmail.com"></div>
</div>
CDspace
  • 2,639
  • 18
  • 30
  • 36
pareshm
  • 4,874
  • 5
  • 35
  • 53

5 Answers5

4

I'd try something like this

Js:

$(function() {
  var email = "abc@gmail.com";
  var div = $("#main").find("div[data-email='"+email+"']");
});

Html:

<div id="main">
  <div data-email="abc@gmail.com"></div>
</div>

Here is a working plunker https://plnkr.co/edit/BDo9SvksNIfCLa6I0HfI

michalh
  • 2,907
  • 22
  • 29
2

I agree that it's probably not the best idea to use an email address as a class. However, the only reason your escaping approach doesn't work is because you are escaping incorrectly. You have too many \ in your replacement value.

It should be

function escapeSelecorchars(val) {
  return val.replace(/[!"#$%&'()*+,.\/:;<=>?@[\\\]^`{|}~]/g,"\\$&");
};

and then it works.

Felix Kling
  • 795,719
  • 175
  • 1,089
  • 1,143
1

Because of special characters it is difficult to find element.

Checkout this code

$(document).ready(function(){
  //not working getting error
var ele = $("#main").find("div[data-email='abc@gmail.com']");
 
 
 console.log($(ele).attr('data-email'))

  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="main">
  <div data-email="abc@gmail.com" class="email"></div>
</div>
Chetan
  • 944
  • 5
  • 22
0

Use Attribute Equals Selector [class="value"”]

console.log($('#main > div[class="abc@gmail.com"]').length);

$(document).ready(function(){
  console.log($('#main > div[class="abc@gmail.com"]').length);
  
  $("#main").find("div[class='abc@gmail.com']").html("Appended");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main">
     <div class="abc@gmail.com"></div>
</div>
Mohit Tanwani
  • 6,608
  • 2
  • 14
  • 32
0

Try

$('#main div').filter(function(){ return $(this).attr('class') == 'abc@gmail.com'});

or

$('div').filter(function(){ return $(this).attr('class') == 'abc@gmail.com'});
Atul Mishra
  • 298
  • 2
  • 11