-1

当我在警报框中打印“this”实例时,它正在打印类似这样的内容。

[object Object]

但里面的实际内容是

<dl>
   <dt>
       my Name <span> John Krishna </span>
   </dt>
   <dd>
       <span>My fathers name</span>
   </dd>
 </dl>

我只想显示“我的名字”而不是 [object Object]。我的意思是那个“dt”中的 span 内容我想在我的警报框中显示它。

为此,我在 google 中进行了尝试,在每个地方我都得到了使用 child 或使用内部 html 内容之类的解决方案,并且在某些解决方案中有人为循环编写了一些解决方案。但我不想围绕它编写任何 for 循环,这会使我的代码变大。

有人请建议我如何在警报框中只打印“我的名字”。

4

7 回答 7

5

这取决于您如何进行选择。如果它在整个dl标签上,那么它应该是这样的

alert($("dl").find("dt").clone().find("span").remove().end().html());

其中 dl 是一个示例选择。我不知道你是如何得到它的(通过 id、class 等)

如果您直接选择dt标签,则应使用较短的版本

alert($("dt").clone().find("span").remove().end().html());
于 2013-08-01T09:31:56.750 回答
1

在我看来,您正试图提醒整个对象。您需要使用jQuery 的text()方法来仅显示元素的文本。

如果this已经选择了span您所追求的元素,您可以简单地使用:

alert($(this).text()); // Instead of alert($(this));

我只需要“dt”内的文本,不应打印跨度内的内容

为此,我们可以使用正则表达式来替换元素 HTML中的<span>内容:dt

alert($('dt').html().replace(/<span>.*<\/span>/,''));

这是一个使用中的JSFiddle 演示

这比使用克隆元素快 96%,如下面的其他一些答案所建议的那样。

于 2013-08-01T09:24:11.167 回答
0

尝试映射:将它们收集到一个数组中,而不是两次调用 $:

var texts = $('span').map(function(){
    return this.previousSibling.nodeValue
});
texts[0]; // "Some text followed by "
texts[1]; // " and another text followed by "
alert(texts[0]);

希望它会有所帮助

于 2013-08-01T09:41:23.837 回答
0

将 id 添加到 span(例如<span id="myname">Test Name</span>),然后在 jQuery 中匹配 id(使用$("#myname"))并提醒该元素的文本以返回您需要的内容。

例如:

alert($("myname").text());
于 2013-08-01T09:25:40.090 回答
-1

您将需要使用:

$(this).html();
于 2013-08-01T09:23:32.360 回答
-1

利用:

alert($(this).find("dt span").text());

在 jQuery 中获取跨度之外的文本有点棘手。我在这里找到了这段代码:

var myName = $(this).find("dt")
    .clone()    //clone the element
    .children() //select all the children
    .remove()   //remove all the children
    .end()  //again go back to selected element
    .text(); 
于 2013-08-01T09:25:04.227 回答
-1
try this:

     var name=$(this).children('dt').children('span').text();
     alert('name --->'+name);

谢谢

于 2013-08-01T09:31:48.737 回答