【问题标题】:How can I get the title of a dynamically generated html?如何获取动态生成的 html 的标题?
【发布时间】:2014-10-08 17:47:56
【问题描述】:

我有以下代码:

for(var i = 0;i < choices.length; i++){
     var $plans = $("<li id='entirePlan' class='Solution_ID'></li>").html('<p id="plan_id" class="plan_class">Plan: '+(i+1)+'</p>');
}

这会在我的网站上创建最多三个不同的计划,并相应地标记。 (可以有 1 个计划、2 个计划或 3 个计划)。如果这三个都存在,它看起来像

计划:1

-----计划信息在这里----

计划:2

-----计划信息在这里----

计划:3

-----计划信息在这里----

我希望能够检查每个计划中的信息,如果符合某些条件,则隐藏该计划。像这样:

if(myCondition === something){
    if(plan1 exists){
         //hide plan 1
    }
}else if(myCondition === something){
     if(plan2 exists){
         //hide plan 2
    }
}else if(myCondition === something){
     if(plan3 exists){
         //hide plan 3
    }
}

但是,为了隐藏它,我无法获得计划的编号。这是动态生成的计划之间的唯一区别。我尝试了以下方法:

$('p#plan_id.plan_class'))
$('#plan_id'))
$('.plan_class'))
$('#plan_id.plan_class'))

然后是每个末尾带有 .html() 或 .text() 的内容。我不知道它是什么计划编号。我想过尝试做一些类似的事情:first,:second,:third,但也无法以这种方式获得价值。

我正在使用 .js 文件,但更喜欢先使用 jquery。 javascript 作为最后的手段。建议?

--更新: 我也尝试了 Luizgrs 的答案。我尝试将数据编号添加到我的

带有我的标题和解决方案 ID 旁边。我在 console.log 中进行了测试,看看我是否得到了我需要的东西。我用过:

console.log("plan?", $('.Solution_ID').data('number'));
console.log("plan?", $('.Solution_ID[data-number=1]'));
console.log("plan?", $('.plan_class').data('number'));
console.log("plan?", $('.plan_class[data-number=1]'));

我得到了:

我在该对象中远程看到的唯一需要的东西是在 childElementcount = 1 下。我尝试将 childElementcount 附加到上述调用的末尾,但出现错误。

我在下面使用 console.log 尝试了 typeoneerror 的建议解决方案,看看我是否能得到我想要的:

console.log("plan?", $('#entirePlan_1 p'));
console.log("plan?", $('#entirePlan_1 p').text());
console.log("plan?", $('#entirePlan_1 p').html());

结果: 不工作的家伙,我不知道为什么..

【问题讨论】:

  • 您是否有在线或 jsbin 上的工作示例,以便我们查看?从这个问题有点难以理解。
  • 你不能在一页上使用几个id
  • 所以你想根据它的索引号来获取计划,对吧?猜测像:first :second :third 这样的语法并不是解决问题的有用方法。 DOM selection 使用 jQuery 有充足的文档。

标签: javascript jquery html css title


【解决方案1】:

看起来您将拥有choices.length 数量的li 标签具有相同的“id”,即entirePlan。您可能希望这些 ID 是唯一的。您可以将 i 附加到 id 并删除 p 的 id...

for (var i = 0; i < choices.length; i++) {
     var $plans = $("<li id='entirePlan_'" + (i + 1) + " class='Solution_ID'></li>").html('<p class="plan_class">Plan: ' + (i + 1) + '</p>');
}

那么你的 li 看起来类似于:

<li id='entirePlan_1' class='Solution_ID'>

你可以像这样通过 jQuery “选择”它们:

$('#entirePlan_1')
$('#entirePlan_2')
// etc

并获取p标签中的文本:

$('#entirePlan_1 p').text() // Plan: 1

【讨论】:

  • 我试过了,但它不适合我。我将我的测试添加到我的原始问题中,以便您可以在开发人员工具中看到它给了我什么。当我展开那个箭头时,我无法在一个可以拉的地方找到我的结果。
  • 抱歉,有点乱。您需要在某处发布您的实际代码,以便我们可以看到您缺少什么。我想我们已经回答了您的问题,但您似乎并不了解 HTML 或 jQuery 选择器的工作原理,因此我建议您阅读这些内容。
  • 很明显,我会继续尝试,因为我需要弄清楚。但我完全按照你们的建议做了,但它没有用,所以我不确定你为什么说我不知道​​选择器是如何工作的。
  • 抱歉,如果没有看到实际的工作代码,无法进一步帮助您。 “确实做到了”是相对的。您可能已经完全按照我们的建议进行了操作,但您可能忽略了我们尚未看到的代码中的错误。因此,将其发布,以便我们进行调试。否则,祝你好运:)
【解决方案2】:

使用数据属性。这是为向 HTML 元素添加特定信息而创建的功能。

假设您最终得到以下 HTML:

<li class="Solution_ID"><p ...></li>
<li class="Solution_ID"><p ...></li>
<li class="Solution_ID"><p ...></li>

添加一个名为data-number的新属性

<li class="Solution_ID" data-number="1"><p ...></li>
<li class="Solution_ID" data-number="2"><p ...></li>
<li class="Solution_ID" data-number="3"><p ...></li>

您可以使用 jQuery 使用 .data() 方法检索该值:

$('.Solution_ID').data('number') //will retrieve 1, 2 or 3

或选择一个特定的计划:

$('.Solution_ID[data-number=2]');

还要注意你使用的ID,不要重复!

【讨论】:

  • $('.Solution_ID[data-number=2]');似乎不起作用,$('.plan_class[data-number=2]');
  • 它确实有效,你确定属性在那里吗?
猜你喜欢
  • 2014-04-18
  • 2017-03-24
  • 2014-04-26
  • 1970-01-01
  • 2021-08-08
  • 1970-01-01
  • 1970-01-01
  • 2013-07-04
  • 2018-05-21
相关资源
最近更新 更多