Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用jQuery'测试现有元素;s.长度不';看不到新创建的元素_Javascript_Jquery_Html Table - Fatal编程技术网

Javascript 使用jQuery'测试现有元素;s.长度不';看不到新创建的元素

Javascript 使用jQuery'测试现有元素;s.长度不';看不到新创建的元素,javascript,jquery,html-table,Javascript,Jquery,Html Table,我正在尝试使用jQuery和上下文菜单插件为HTML表创建一个复制/粘贴系统,并尝试对所有新创建的行进行唯一命名。因此,我有一个功能,可以克隆选定的行并在上面插入新行: function cloneAbove(TR) { var newRow = $(TR).clone(); var lastID = $(TR).attr('id'); var newID = Number(lastID.substring(3))-0.1; //See if that row

我正在尝试使用jQuery和上下文菜单插件为HTML表创建一个复制/粘贴系统,并尝试对所有新创建的行进行唯一命名。因此,我有一个功能,可以克隆选定的行并在上面插入新行:

function cloneAbove(TR) {
    var newRow = $(TR).clone();
    var lastID = $(TR).attr('id');
    var newID = Number(lastID.substring(3))-0.1;

    //See if that row already exists:
    if($('#tr_'+newID).length){
    alert('#tr_'+newID+' Exists');
    //If it does exist, we divide the newID by 10 until we find one that doesn't:
    var i = 0;
    while(i < 1){
        newID = newID/10;
        if($('#tr_'+newID).length > 0){
        i = 1;
        }
    }
    }
    $(newRow).attr('id','tr_'+newID);
    $(TR).before(newRow);
    $(".target").contextmenu(option);
}
函数cloneAbove(TR){
var newRow=$(TR.clone();
var lastID=$(TR.attr('id');
var newID=编号(lastID.substring(3))-0.1;
//查看该行是否已存在:
if($('#tr#'+newID).length){
警报(“#tr#”+newID+“存在”);
//如果确实存在,我们将newID除以10,直到找到一个不存在:
var i=0;
而(i<1){
newID=newID/10;
如果($('#tr#'+newID).length>0){
i=1;
}
}
}
$(newRow).attr('id','tr_uu'+newID);
美元(TR).之前(纽罗);
$(“.target”).contextmenu(选项);
}
首先,它克隆所选行(即:“#tr_1”),减去新行id的0.1(即:“#tr_0.9”),然后检查该id是否已经存在-这就是我的问题所在-如果它存在,它将进入一个循环,除以10,直到找到一个不存在的id

以下是表格的示例:

<table id="table" border=1>
       <tr class="target" id="tr_1" oncontextmenu="context('tr1')">
           <td id="tr_1_1">Row1</td>
           <td id="tr_1_2">Row1</td>
       </tr>
       <tr class="target" id="tr_2" oncontextmenu="context('tr2')">
           <td id="tr_2_1">Row2</td>
           <td id="tr_2_2">Row2</td>
       </tr>
</table>

第1行
第1行
第2行
第2行
.length适用于页面加载时存在的“硬编码”元素,但它不会检测任何新创建的元素。有什么建议吗?

您正在构建的“id”值会让jQuery感到困惑。选择器“#tr_0.9”表示“查找id为'tr_0'且类为'9'的元素”,而不是“查找id为'tr_0.9'的元素”

撇开这一事实不谈,我认为这是一种构造“id”值的非常奇怪的方式,您可以通过“引用”这些“.”字符使其工作:

if ($(('#tr_' + newId).replace(/\./g, "\\.")).length) {
  // ... found a duplicate ...
这样做的目的是在构造的试验“id”值中用“.”替换“.”。当然,您只想在通过jQuery选择器查找元素时执行此操作;您不希望实际的“id”值中有反斜杠


或者,您可以将“.”字符替换为“u”或其他字符。

您需要考虑如何解析jQuery选择器。添加新行时,新行的id设置为十进制数字(即“0.9”)。但是当使用jQuery选择器时
$('tr#u 0.9')
你是说:

获取id为“tr_0”的an元素 还有一个“9”级

点运算符是类选择器的符号。尝试使用整数值而不是小数


编辑:我太慢了

这很有效,但我明白你的意思,我的方法显然有缺陷。该表将包括表单字段,这些字段将遵循与其TR ID相同的命名约定,我可以看到,在通过POST(PHP)发送其值时,这是一个问题。重要的是,所有字段都可以根据其父TR轻松地分组在一起,并按照用户创建的顺序排列。因此,将tr_1复制到上面的行将给出它的ID和子表单字段名,其结束号小于1。有没有更好的方法来实现这一点?保持“id”值干净可能是一个好主意,只是为了控制总体头痛水平。您可以在“id”值中使用破折号和下划线,如果您想继续使用该数字技巧,可以将原始数值存储在单独的属性中,如“data num id”。在为新元素计算新的“id”时,您会使用该属性值,但“id”字符串本身会“.”更改为“-”。只是一个想法;可能还有其他方法。