jQuery.siblings没有找到兄弟姐妹

时间:2012-10-24 09:31:15

标签: jquery asp.net dom

我对一个我正在维护的网络系统有一个非常特殊的问题。在视图中,我想从我的DOM中的标签字段中获取问题编号。但是我的代码无法找到label元素。

这是脚本部分。

$(document).ready(function () {
                $(function () {
                var result = $(".answer").click(function () {
                    $(this).editable({
                        className: "",
                        saveUrl: "../api/Results/SaveResults",
                        create: function () {
                            var number = $(this).siblings(".number").text();
                            console.log(number);
                            $(this).editable("option", "questionNumber", number);
                        }
                    });
                });
            });
        });

这是HTML

<div class="questionDiv">
                    <asp:Label ID="questionNumber1" runat="server" CssClass="number"></asp:Label>
                    <asp:TextBox ID="answer1" Wrap="True" runat="server" CssClass="answer" TextMode="MultiLine" Width="100%"
                            Rows="5" MaxLength="2000" Columns="65"></asp:TextBox>
                </div>

在浏览器中呈现:

<span id="questionNumber1" class="number">1</span>
<textarea name="answer1" rows="5" cols="65" id="answer1" class="answer" style="width: 540px; "></textarea>

由于某种原因,create函数中的数字变为空字符串。使用$(this)的原因之一是每页有多个问题。 label.text是根据Page_Load()方法中的代码设置的。

我一直尝试使用多种不同的组合;

$(this).prev().text()

$(this).parent().children(".number").text()

$(this).parent().children().find(".number").text()

等。

如果我在chrome控制台中尝试这些组合,即。 $("#answer1").siblings().text()它完美无缺。

有没有人知道为什么会这样?所有元素都应该在document.ready()函数中完成。

提前致谢。

彼得

编辑:经过更多调查后我发现即使我使用var number = $("questionNumber1").text();,我也会得到一个空字符串。这个问题可能与DOM未完全加载有关。脚本块位于document.ready()中,因此可以猜测DOM已加载。

2 个答案:

答案 0 :(得分:0)

this方法中的create可能是$(".answer")以外的其他内容吗?

尝试备份,可能有帮助:

var result = $(".answer").click(function() {
    var $this = $(this);
    $this.editable({
        className: "",
        saveUrl: "../api/Results/SaveResults",
        create: function() {
            var number = $this.siblings(".number").text();
            console.log(number);
            $this.editable("option", "questionNumber", number);
        }
    });
});

答案 1 :(得分:0)

问题是create:function将$(this)包装在另一个div中。所以,parent()。parent()。first(“。number”)解决了它。