我的结构如下:
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">Tiger128 (v2)</h3>
</div>
<div class="panel-body">
<input class="form-control" id="tiger128v2" placeholder="String to Hash" type="text">
</div>
<div class="panel-footer">
<a class="btn btn-primary generate-hash" data-hash="tiger128v2">Generate Hash</a>
</div>
</div>
当用户按下<a>
时,它会运行jQuery函数(使用$('.generate-hash')
选择器),这会使$.getJSON
请求通过data-hashtype
。当它返回JSON对象时,我需要它将一些文本附加到<div class="panel-body">
,但是你可以看到它们都没有ID。
我所尝试的是:
$(this).parent().prev('.panel-body').append('Appending some text');
$(this).parent().parent().siblings(".panel-body").append('test');
但我无法让它发挥作用。有什么建议吗?
$('.generate-hash').click(function (e) {
e.preventDefault();
var hashtype = $(this).data('hash');
var string = $(this).closest('.panel').find('input').val();
console.log('Started hash request for ' + hashtype + ' with a value of ' + string);
$.getJSON('ajax/hash.php', {
hashtype: hashtype,
string: string
})
.success(function(data) {
console.log('success function');
if(data.type == 'success'){
// Here is where i need to select the parents
$(this).parent().parent().siblings(".panel-body").append('test');
$(this).parent().prev('.body').append('<div class="alert alert-info"><strong>Generated Hash:</strong> <code>' + data.hash + '</code></div>');
console.log('success msg found');
}else{
$(this).parent().prev('.body').append('<div class="alert alert-' + data.type + '">' + data.msg + '</div>');
console.log('error msg found');
}
})
.fail(function() {
$(this).parent().prev('.body').append('<div class="alert alert-error"><strong>Error:</strong> We could not generate the hash for some reason. The details are below:</div>');
console.log('unable to find hash.php or other error');
});
});
答案 0 :(得分:3)
您可以使用.prev()
方法:
$(this).parent().prev('.body').append('Something');
或.closest()
方法:
$(this).closest('.box').find('.body').append('Something');
编辑:
您应该在Deferred对象的处理程序this
的上下文中缓存this
对象,不引用所单击的元素,同时将.success()
替换为.done()
:
$('.generate-hash').click(function (e) {
// ...
var $this = $(this);
$.getJSON('ajax/hash.php', {
hashtype: hashtype,
string: string
})
.done(function(data) {
console.log('success function');
if(data.type == 'success'){
// Here is where i need to select the parents
$this.parent().parent().siblings(".panel-body").append('test');
// ...
})
.fail(function() {
$this.parent()...
});
});
答案 1 :(得分:2)
使用closest
nearest()从DOM树中选择与选择器匹配的第一个元素,而parent()选择DOM树中另一个元素的父元素。
$(this).closest('.box').find('.body').append('Something');
参考 closest
答案 2 :(得分:0)
尝试这样的事情,试试prev()
$(this).parent().prev().append('Something');
答案 3 :(得分:0)
也许纯粹的javascript可能有效
var box = this.parentNode.parentNode,
body = box.getElementsByClassName('body')[0];
body.innerHTML += 'Something';
答案 4 :(得分:0)