<div id="test"></div>
<script>
$(document).ready(function() {
alert($('#test').id);
});
</script>
Por que o procedimento acima não funciona e como devo fazer isso?
<div id="test"></div>
<script>
$(document).ready(function() {
alert($('#test').id);
});
</script>
Por que o procedimento acima não funciona e como devo fazer isso?
Respostas:
A maneira jQuery:
$('#test').attr('id')
No seu exemplo:
$(document).ready(function() {
console.log($('#test').attr('id'));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="test"></div>
Ou através do DOM:
$('#test').get(0).id;
ou até:
$('#test')[0].id;
e a razão por trás do uso $('#test').get(0)
no JQuery ou mesmo $('#test')[0]
é que $('#test')
é um seletor JQuery e retorna uma matriz () de resultados, não um único elemento por sua funcionalidade padrão
uma alternativa para o seletor DOM no jquery é
$('#test').prop('id')
que é diferente .attr()
e $('#test').prop('foo')
captura a foo
propriedade DOM especificada , enquanto $('#test').attr('foo')
captura o foo
atributo HTML especificado e você pode encontrar mais detalhes sobre diferenças aqui .
$('#test').id()
.
$('selector').attr('id')
retornará o ID do primeiro elemento correspondente. Referência .
Se seu conjunto correspondente contiver mais de um elemento, você poderá usar o .each
iterador convencional para retornar uma matriz contendo cada um dos IDs:
var retval = []
$('selector').each(function(){
retval.push($(this).attr('id'))
})
return retval
Ou, se você quiser ficar um pouco mais duro, evite o invólucro e use o .map
atalho .
return $('.selector').map(function(index,dom){return dom.id})
retval.push($(this).attr('id'))
pode ser escritoretval.push(this.id)
return $('.selector').map(function(i, dom){ return $(dom).attr('data-id'); })
id
é uma propriedade de um html Element
. No entanto, quando você escreve $("#something")
, ele retorna um objeto jQuery que envolve os elementos DOM correspondentes. Para recuperar o primeiro elemento DOM correspondente, chameget(0)
$("#test").get(0)
Nesse elemento nativo, você pode chamar o ID ou qualquer outra propriedade ou função DOM nativa.
$("#test").get(0).id
Essa é a razão pela qual id
não está funcionando no seu código.
Como alternativa, use o attr
método jQuery, pois outras respostas sugerem obter o id
atributo do primeiro elemento correspondente.
$("#test").attr("id")
As respostas acima são ótimas, mas à medida que o jquery evolui ... você também pode:
var myId = $("#test").prop("id");
attr()
foi adicionado na versão 1.0, e na versão prop()
1.6, por isso estou assumindo que o seu comentário foi prop()
o novo caminho.
attr
) ou na potencialmente modificada pelo script ( prop
). Se você não está realmente modificando o id
atributo de qualquer elemento usando o script do lado do cliente, em seguida, prop
e attr
são idênticos.
.id
não é uma função jquery válida. Você precisa usar a .attr()
função para acessar atributos que um elemento possui. Você pode usar .attr()
para alterar um valor de atributo especificando dois parâmetros ou obter o valor especificando um.
Bem, parece que não houve uma solução e gostaria de propor minha própria solução, que é uma expansão do protótipo JQuery. Coloquei isso em um arquivo Helper carregado após a biblioteca JQuery, portanto, a verificação dewindow.jQuery
if (window.jQuery) {
$.prototype.id = function () {
if (this.length > 1) {
var val = [];
this.each(function (idx, el) {
val.push($(el).id());
});
return val;
} else {
return this.attr('id');
}
}
}
Pode não ser perfeito, mas é um começo para talvez ser incluído na biblioteca JQuery.
Retorna um único valor de sequência ou uma matriz de valores de sequência. A matriz de valores de sequência é para o evento em que um seletor de vários elementos foi usado.
$('#test')
retorna um objeto jQuery; portanto, você não pode usar simplesmente object.id
para obter seuId
você precisa usar $('#test').attr('id')
, que retorna as informações necessáriasID
do elemento
Isso também pode ser feito da seguinte maneira:
$('#test').get(0).id
que é igual a document.getElementById('test').id
$('#test')[0].id
que é o mesmo que.get(0)
Talvez útil para outras pessoas que encontrarem este tópico. O código abaixo só funcionará se você já usa o jQuery. A função retorna sempre um identificador. Se o elemento não tiver um identificador, a função gera o identificador e anexa-o ao elemento.
var generatedIdCounter = 0;
$.fn.id = function() {
var identifier = this.attr('id');
if(!identifier) {
generatedIdCounter++;
identifier = 'isGenerated_' + generatedIdCounter;
this.attr('id', identifier);
}
return identifier;
}
Como usar:
$('.classname').id();
$('#elementId').id();
Esta é uma pergunta antiga, mas a partir de 2015 isso pode realmente funcionar:
$('#test').id;
E você também pode fazer atribuições:
$('#test').id = "abc";
Contanto que você defina o seguinte plug-in JQuery:
Object.defineProperty($.fn, 'id', {
get: function () { return this.attr("id"); },
set: function (newValue) { this.attr("id", newValue); }
});
Curiosamente, se element
é um elemento DOM, então:
element.id === $(element).id; // Is true!
Como o ID é um atributo, você pode obtê-lo usando o attr
método
Pode ser a identificação do elemento, classe ou automaticamente usando
------------------------
$(this).attr('id');
=========================
------------------------
$("a.remove[data-id='2']").attr('id');
=========================
------------------------
$("#abc1'").attr('id');
=========================
Isso finalmente resolverá seus problemas:
digamos que você tenha muitos botões em uma página e deseje alterar um deles com o jQuery Ajax (ou não o ajax), dependendo de seu ID.
digamos também que você possui muitos tipos diferentes de botões (para formulários, para aprovação e para propósitos semelhantes) e deseja que o jQuery trate apenas os botões "like".
Aqui está um código que está funcionando: o jQuery tratará apenas os botões da classe .cls-hlpb, pegará o ID do botão que foi clicado e o alterará de acordo com os dados provenientes do ajax.
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"> </script>
<script>
$(document).ready(function(){
$(".clshlpbtn").on('click',function(e){
var id = $(e.target).attr('id');
alert("The id of the button that was clicked: "+id);
$.post("demo_test_post.asp",
{
name: "Donald Duck",
city: "Duckburg"
},
function(data,status){
//parsing the data should come here:
//var obj = jQuery.parseJSON(data);
//$("#"+id).val(obj.name);
//etc.
if (id=="btnhlp-1")
$("#"+id).attr("style","color:red");
$("#"+id).val(data);
});
});
});
</script>
</head>
<body>
<input type="button" class="clshlpbtn" id="btnhlp-1" value="first btn"> </input>
<br />
<input type="button" class="clshlpbtn" id="btnhlp-2" value="second btn"> </input>
<br />
<input type="button" class="clshlpbtn" id="btnhlp-9" value="ninth btn"> </input>
</body>
</html>
O código foi retirado do w3schools e alterado.
<html>
<head>
<link rel="stylesheet"href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<?php
// include Database connection file
include("db_connection.php");
// Design initial table header
$data = '<table class="table table-bordered table-striped">
<tr>
<th>No.</th>
<th>First Name</th>
<th>Last Name</th>
<th>Email Address</th>
<th>Update</th>
<th>Delete</th>
</tr>';
$query = "SELECT * FROM users";
if (!$result = mysqli_query($con, $query)) {
exit(mysqli_error($con));
}
// if query results contains rows then featch those rows
if(mysqli_num_rows($result) > 0)
{
$number = 1;
while($row = mysqli_fetch_assoc($result))
{
$data .= '<tr>
<td>'.$number.'</td>
<td>'.$row['first_name'].'</td>
<td>'.$row['last_name'].'</td>
<td>'.$row['email'].'</td>
<td><button onclick="DeleteUser('.$row['id'].')" class="btn btn-danger">Delete</button>
</td>
</tr>';
$number++;
}
}
else
{
// records now found
$data .= '<tr><td colspan="6">Records not found!</td></tr>';
}
$data .= '</table>';
echo $data;
?>
<script type="text/javascript">
function DeleteUser(id) {
var conf = confirm("Are you sure, do you really want to delete User?");
if (conf == true) {
$.ajax({
url:'deleteUser.php',
method:'POST',
data:{
id:id
},
success:function(data){
alert('delete successfully');
}
}
});
deleteUser.php
<?php
// check request
if(isset($_POST['id']) && isset($_POST['id']) != "")
{
// include Database connection file
include("db_connection.php");
// get user id
$user_id = $_POST['id'];
// delete User
$query = "DELETE FROM users WHERE id = '$user_id'";
if (!$result = mysqli_query($con, $query)) {
exit(mysqli_error($con));
}
}
?>
não responde ao OP, mas pode ser interessante para outras pessoas: você pode acessar o .id
campo neste caso:
$('#drop-insert').map((i, o) => o.id)