Eu tenho alguns html como este:
<div id="1">
<p>
Volume = <input type="text" />
<button rel="3.93e-6" class="1" type="button">Check answer</button>
</p>
<div></div>
</div>
e alguns JS como este:
$("button").click(function () {
var buttonNo = $(this).attr('class');
var correct = Number($(this).attr('rel'));
validate (Number($("#"+buttonNo+" input").val()),correct);
$("#"+buttonNo+" div").html(feedback);
});
O que eu realmente gostaria é se eu não tivesse que ter a classe = "1" no botão (eu sei que classes numéricas não são válidas, mas este é um WIP!), Então eu poderia determinar o botãoNo com base no id do div pai. Na vida real, existem várias seções com esta aparência.
Como faço para encontrar o id do div pai do botão.
Qual seria uma forma mais semântica de armazenar a resposta no código do botão. Eu quero tornar isso o mais infalível possível para um não programador copiar e colar sem quebrar as coisas!
1
2
Deve haver um grande número de maneiras! Uma poderia ser ocultar um elemento que contém a resposta, por exemplo
E, em seguida, tenha um código jQuery semelhante ao acima para obter isso:
tenha em mente que se você colocar a resposta no código do cliente, eles poderão vê-la :) A melhor maneira de fazer isso é validando-a no lado do servidor, mas para um aplicativo com escopo limitado, isso pode não ser um problema.
fonte
$(parent[0]).attr('id')
depois de alguns seletores pai.Experimente isto:
fonte
fonte
Para obter o id do div pai:
Além disso, você pode refatorar seu código um pouco:
Agora não há necessidade de uma classe de botão
a explicação
eq (0) significa que você selecionará um elemento do objeto jQuery, neste caso o elemento 0, portanto, o primeiro elemento. http://docs.jquery.com/Selectors/eq#index
$ (seletor) .siblings (siblingsSelector) selecionará todos os irmãos (elementos com o mesmo pai) que correspondem ao siblingsSelector http://docs.jquery.com/Traversing / siblings # expr
$ (seletor) .parents (ParentsSelector) selecionará todos os pais dos elementos correspondidos pelo seletor que correspondem ao seletor pai. http://docs.jquery.com/Traversing/parents#expr
Assim: $ (selector) .parents ('div: eq (0)'); corresponderá ao primeiro div pai dos elementos correspondidos pelo seletor.
Você deve dar uma olhada na documentação do jQuery, particularmente seletores e travessia:
fonte
http://jsfiddle.net/qVGwh/6/ Verifique isto
fonte
Isso pode ser feito facilmente fazendo:
Você anexa isso a qualquer objeto dentro de uma tabela e ele retornará o id dessa tabela.
fonte
JQUery tem um método .parents () para mover para cima na árvore DOM, você pode começar aí.
Se você estiver interessado em fazer isso de uma forma mais semântica, não acho que usar o atributo REL em um botão seja a melhor maneira de definir semanticamente "esta é a resposta" em seu código. Eu recomendaria algo neste sentido:
e
Não tenho certeza de como sua validação e feedback estão funcionando, mas você entendeu.
fonte
find () e mais próximo () parece um pouco mais lento do que:
fonte
$(this).parent().parent().attr("id");
?