【问题标题】:How to assign $(this) with multiple same class vs unique id如何为 $(this) 分配多个相同的类与唯一的 id
【发布时间】:2015-01-31 00:17:34
【问题描述】:

我过去曾问过类似的问题,但我整理了以下示例,以更好地说明我正在寻求的结果。

在经典 js 中使用唯一 id。(有效)

<style>
#par {width:350px; background:#DDD; padding:5px;}
#tatx {color:#C00;}
</style>

<div id="par">
Select an option, then, select another option<br>
<select id="sl" onChange="sltota();tatotx()">
<option value="item 1">option 1</option>
<option value="item 2">option 2</option>
<option value="item 3">option 3</option>
</select><br>
    <p>Selected options values are passed to textarea<br>
<textarea id="ta" onChange="tatotx()"></textarea>
<p>Textarea value is passed to div as text
<div id="tatx">div text</div>
</div>

<script>
function sltota() {
slVal = document.getElementById('sl').value;
taVal = document.getElementById('ta').value;
document.getElementById('ta').value = taVal + ('- ') + slVal + ('\n');
}

function tatotx() {
taVal = document.getElementById('ta').value;
document.getElementById('tatx').innerHTML = taVal;
}
</script>

现在我正在尝试使用具有相同类的多个元素的 Jquery $(this) 修改此代码。但我不能让它工作,感谢任何帮助。(这不起作用)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"></script>
<style>
li {margin-bottom:7px; background:#DDD; padding:5px;}
#par {width:350px;}
.tatx {color:#C00;}
</style>

<div id="par">
<ul>

<li>
Select an option, then, select another option.<br>
<select class="sl">
<option value="item 1">option 1</option>
<option value="item 2">option 2</option>
<option value="item 3">option 3</option>
</select><br>
<p>Selected options values are passed to textarea<br>
<textarea class="ta"></textarea>
<p>Textarea value is passed to div as text
<div class="tatx">Div Text</div>
</li>
<li>
Select an option, then, select another option.<br>
<select class="sl">
<option value="item 1">option 1</option>
<option value="item 2">option 2</option>
<option value="item 3">option 3</option>
</select><br>
<p>Selected options values are passed to textarea<br>
<textarea class="ta"></textarea>
<p>Textarea value is passed to div as text
<div class="tatx">Div Text</div>
</li>
<li>
Select an option, then, select another option.<br>
<select class="sl">
<option value="item 1">option 1</option>
<option value="item 2">option 2</option>
<option value="item 3">option 3</option>
</select><br>
<p>Selected options values are passed to textarea<br>
<textarea class="ta"></textarea>
<p>Textarea value is passed to div as text
<div class="tatx">Div Text</div>
</li>

</ul>
</div>

<script>
$(document).ready(function(){
$('li > .sl').on('change', function() {
    $(this).sibling('.ta').val($(this).val());
    $(this).sibling('.tatx').val($('.ta').val());

});
}
</script>

【问题讨论】:

  • 好吧,1:变量名称有点混乱,

标签: jquery class this


【解决方案1】:

一些事情:

  1. siblings,而不是sibling。而siblings 只关注直系兄弟姐妹,而不是他们的后代。 .tatx 很好,因为它是直接兄弟,但 .ta 是兄弟(p 元素)的子,因此您必须使用 find() 遍历找到的兄弟

  2. 您的 JS 代码末尾缺少 ); 以关闭 ready 语句

  3. Div 不能使用val(), 设置其内容,您需要设置html()

所以...

<script>
$(document).ready(function(){
$('li > .sl').on('change', function() {
    $(this).siblings().find('.ta').val($(this).val());
    $(this).siblings('.tatx').html($(this).val());
    });
});
</script>

【讨论】:

  • 。我应该编写另一个函数来更新 .tatx 类吗?我注意到这没有更新。
  • 不,我的回答有误!我修复了它,使用 .tatx 的更新代码重试(需要是 siblings('.tatx'),而不是 siblings().('.tatx')
  • 像魅力一样工作。 $(document).ready(function(){ $('li > .sl').on('change', function() { $(this).siblings().find('.ta').val( $(this).val()); $(this).siblings('.tatx').html($(this).val()); }); });
  • 有趣的是,'.ta' 需要 .find,而 '.tatx' 不需要。我想你用你最初的评论回答了这个问题。再次感谢您的帮助。
  • 好的,非常接近,我尝试 .append ".ta" 所以我在 textarea 中保留当前选项并添加到它们,就像我在我提供的 js 示例中所做的那样,但我还没有想到出来了。有什么想法吗?
【解决方案2】:

应该是siblings 不是兄弟:

$('li > .sl').on('change', function() {
    $(this).siblings('.ta').val($(this).val());
    $(this).siblings('.tatx').val($('.ta').val());   
});

在 jQuery 中没有兄弟选择器,但 siblings

【讨论】:

    猜你喜欢
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多