所以我正在创建一个互动形式 我希望能够在给定选择的上方和下方添加新输入 但是,当我这样做时,我需要更新新条目下方所有内容的ID和标签 我知道我可以使用each()函数遍历所有div,但是,我确信只需更新下面需要更新的内容会更快,特别是如果有多个输入字段。
这是我到目前为止所拥有的。
<form>
<div id="ent1" class="entry">
<span class="label">1. </span>
<input type="text">
<button type="button" onclick="deleteentry(this);"> Delete </button>
<button type="button" onclick="addabove(this);"> Add above </button><br><br>
</div>
<div id="ent2" class="entry">
<span class="label">2. </span>
<input type="text">
<button type="button" onclick="deleteentry(this);"> Delete </button>
<button type="button" onclick="addabove(this);"> Add above </button><br><br>
</div>
<div id="ent3" class="entry">
<span class="label">3. </span>
<input type="text">
<button type="button" onclick="deleteentry(this);"> Delete </button>
<button type="button" onclick="addabove(this);"> Add above </button><br><br>
</div>
<div id="ent4" class="entry">
<span class="label">4. </span>
<input type="text">
<button type="button" onclick="deleteentry(this);"> Delete </button>
<button type="button" onclick="addabove(this);"> Add above </button><br><br>
</div>
</form>
以下是脚本。
<script>
function deleteentry(obj)
{
var o = obj;
while (!o.id)
{
o = o.parentNode;
}
obj = "#" + o.id;
$(obj).remove();
}
function addabove(abo)
{
var a = abo;
while (!a.id)
{
a = a.parentNode;
}
var anum = a.id.replace(/\D/g,'');
anum = parseInt(anum);
var b = a.id; //This is so the div clicked on has a new temp id and no 2 divs share the same id
a.id = "temp";
var ins1 = "<div id='" + b + "' class='entry'>";
var ins2 = "<span class='label'>" + anum + ". </span>";
var ins3 = "<input type='text'> <button type='button' onclick='deleteentry(this);'> Delete </button> ";
var ins4 = "<button type='button' onclick='addabove(this);'> Add above </button>" + b + "<br><br></div>";
$(a).prepend(ins1 + ins2 + ins3 + ins4);
}
那么我们假设您点击上面的条目.2
,我如何访问仅 ent2
div下面的div?
答案 0 :(得分:1)
MikelG - 请看这个小提琴: http://jsfiddle.net/rk73F/
有两个功能可以获取ID +提取你的addAbove一个.. 还删除了你的onclick事件,我发现jquery .on click或.live点击更好..你可能必须根据正在使用的jquery版本更改那些处理程序定义..
更新(两次)
新小提琴:
function getMaxID() {
var ar = new Array();
// for each element with id that starts with 'ent'
$('[id^="ent"]').each(
function () {
// add it to the array (only its numeric part)
ar.push(
// extract the numeric part to be added in the array
parseInt($(this).attr('id').replace('ent', '')));
});
// find the max value in the array
return Math.max.apply(Math, ar);
}
function addAbove(abo) {
var b = getMaxID() + 1;
var ins1 = "<div id='ent" + b + "' class='entry'>";
var ins2 = "<span class='label'>" + b + ". </span>";
var ins3 = "<input type='text'> <button type='button' class='btnDelete'> Delete </button> ";
var ins4 = "<button type='button' class='btnAdd'> Add above </button><br><br></div>";
$(abo).before(ins1 + ins2 + ins3 + ins4);
}
function setDivsSequentialIDs()
{
$.each($('form>div'), function( ind, val ){
$(this).attr('id', 'ent' + ind);
$(this).find('span.label').html(ind + '.');
});
}
$(document).ready(function () {
//NEW:
$('form').on('click', '.btnAdd', function () {
addAbove($(this).parent());
});
$('form').on('click', '.btnDelete', function () {
$(this).parent().remove();
});
//EndNEW
});
答案 1 :(得分:0)
使用$('#your-id').next()
访问所选元素下方的元素,$('#your-div').prev()
访问上述元素。
有关详细信息,请参阅http://api.jquery.com/next/和http://api.jquery.com/prev/。