所以我试图让用户点击一个按钮,按钮值包含一个问题编号和一个div id。然后我尝试使用该问题编号来访问具有id question_no“+ _ text的跨度中的文本。我应该获取文本的行是:
var text=$("div#"+div+" span#"+question_no+"_text").text();
问题是它的工作时间是一半。它会在某些跨度上抓取文本,但不会在其他跨度上抓取。
HHere是我写的剧本:
$("button.add_answer").click(function() {
var question_no=$(this).attr("value")
var div=$(this).attr("data-version");
var text=$("div#"+div+" span#"+question_no+"_text").text();
var answer=$("div#"+div+" [name="+question_no+"]");
var answerText;
var answerValue;
var checkbox=false;
alert($("div#"+div+" span#"+question_no+"_text").length);
if (answer[0].tagName.toLowerCase() == "input") {
if(answer.attr("type") == "text") {
answerText=answer.val();
answerValue=answer.val();
} else if (answer.attr("type") == "radio") {
var answer=$("div#"+div+" [name="+question_no+"]:checked");
answerValue=answer.val();
answerText=answer.next().text();
} else {
alert("checkbox");
checkbox=true;
$("div#"+div+" [name="+question_no+"]:checked").each(function() {
answerText=$(this).next().text();
answerValue=$(this).val();
$("div#saved_answers table").append("<tr id=\""+question_no+"\"><td>"+text+"</td><td>"+answerText+"</td></tr>");
});
}
} else if (answer[0].tagName.toLowerCase()=="textarea") {
answerText=answer.val();
answerValue=anser.val();
} else if(answer[0].tagName.toLowerCase == "select") {
answerText=answer.find("option:selected").text();
answerVal=answer.val();
}
if(!checkbox) {
$("div#saved_answers table").append("<tr id=\""+question_no+"\"><td>"+text+"</td><td>"+answerText+"</td></tr>");
}
});
这是标记:
<div id="1527" class="Questions">
<h1>Questions</h1><hr><br />
<ul class="error" id="498_error"></ul>
<span id="498_text">Title of Representative Completing This Section</span><br />
<input type="hidden" name="498_max_length" id="498_max_length" value="25">
<input type="hidden" name="498_min_value" id="498_min_value" value="">
<input type="hidden" name="498_max_value" id="498_max_value" value="">
<input type="hidden" name="498_regex_format" id="498_regex_format" value="">
<input type="hidden" name="498_system_type" id="498_system_type" value="2">
<input type="hidden" name="498_app_type_version" id="498_app_type_version" value="1527">
<input class="questionChoice" type="text" name="498" />
<br />
<button class="add_answer" value="498" data-version="1527">Add answer</button>
<br /><br />
<ul class="error" id="2150_error"></ul>
<span id="2150_text">Signature:</span><br />
<input type="hidden" name="2150_max_length" id="2150_max_length" value="">
<input type="hidden" name="2150_min_value" id="2150_min_value" value="">
<input type="hidden" name="2150_max_value" id="2150_max_value" value="">
<input type="hidden" name="2150_regex_format" id="2150_regex_format" value="">
<input type="hidden" name="2150_system_type" id="2150_system_type" value="2">
<input type="hidden" name="2150_app_type_version" id="2150_app_type_version" value="1527">
<input class="questionChoice" type="text" name="2150" />
<br />
<button class="add_answer" value="2150" data-version="1527">Add answer</button>
<br /><br />
</div>
正确地抓住第二个问题Signature中的文本,但不是第一个问题,即完成本节的代表名称。
在输入文本后,我只是把它们放在一张表中。
关于为什么每次只能抓住文本的任何想法?
答案 0 :(得分:1)
其中一个按钮具有'data-version'属性,另一个按钮具有'data-app_type_version'。它们应该与您在JS中引用的内容相同(目前“数据版本”):)
答案 1 :(得分:0)
因为,你知道跨度是div的直接子节点,也许你可以使用“&gt;”使它成为直接后代选择器而不是通用后代选择器。
var text = $(“div#”+ div +“&gt; span#”+ question_no +“_ text”)。text();