<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 foopropriedade DOM especificada , enquanto $('#test').attr('foo')captura o fooatributo 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 idnão está funcionando no seu código.
Como alternativa, use o attrmétodo jQuery, pois outras respostas sugerem obter o idatributo 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 idatributo de qualquer elemento usando o script do lado do cliente, em seguida, prope attrsão idênticos.
.idnã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.idpara 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].idque é 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 attrmé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 .idcampo neste caso:
$('#drop-insert').map((i, o) => o.id)