如何更改下一个范围的文本

时间:2018-04-13 12:37:59

标签: javascript jquery sharepoint

我的sharepoint网页中有以下标记(我无法控制标记): -

<span dir="none">
<select id="OrderAssignToApprover_9002e96d-1276-4355-9a2a-0c565d8079db_$DropDownChoice" title="Assign To Approver Required Field" class="ms-RadioText">
<option value="f**">f**</option>
<option value="m**">m**</option>
<option value="m**">m**</option>
<option value="t**">t**</option>
<option value=""></option>
</select>
</span>
<br>
<span class="ms-metadata">AddSourceHere</span>

现在我试图找到一种使用javascript或jquery的方法,动态地将选择列表之后的span的文本从“AddSourceHere”更改为其他内容。

我想做什么: -

  1. 选择具有特定ID
  2. 的选择列表
  3. 选择下一个范围
  4. 更改范围文字。

5 个答案:

答案 0 :(得分:2)

您已在评论中指出,select元素上的ID可以信任,但是还有其他.ms-metadata元素不应更改,因此我们不能仅依赖于该类。< / p>

要注意的四个部分:

  • 您的ID包含$,需要在jQuery选择器中进行转义(\\$
  • 元素不是兄弟元素,因此next()无法从<select>遍历到<span>。而是使用nextAll()
  • 使用eq:(0)first()
  • 防止nextAll溢出到以下所有范围内
  • 您已更改了HTML结构,因此请输入.parent()来补偿

行动中的一个例子:

$("#OrderAssignToApprover_9002e96d-1276-4355-9a2a-0c565d8079db_\\$DropDownChoice")      // the select element
  .parent()                           // climb up to the parent span
  .nextAll('span.ms-metadata:eq(0)')  // get the first following .ms-metadata
  .text('This text was changed')      // change the text
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span dir="none">
  <select id="OrderAssignToApprover_9002e96d-1276-4355-9a2a-0c565d8079db_$DropDownChoice" title="Assign To Approver Required Field" class="ms-RadioText">
    <option value="f**">f**</option>
    <!-- other options omitted for brevity -->
  </select>
</span>
<br>
<span class="ms-metadata">AddSourceHere</span>
<span class="ms-metadata">This should not be affected</span>

答案 1 :(得分:1)

假设ms-metadata类只有一个范围和/或您只关心该类的第一个范围......

使用Javascript:

Import-Module ActiveDirectory

Write-Host 'This script is used to check what users have access to a particular network drive.' `n 'Please wait...'

Start-Sleep 4

Write-Host 'Below is a list of the available DJ network drive security groups:'

Start-Sleep 3

Get-ADGroup -Filter * -SearchBase "OU=Network Drives,OU=DJ Security Groups,OU=Security Groups,DC=lan,DC=cyclops-electronics,DC=com" | FL Name

Start-Sleep 3

$SecurityGroup = Read-Host -Prompt 'From the list, please enter a security group name which corresponds to the network drive you wish to check'

Get-ADGroupMember -Identity $SecurityGroup | select name |export-csv
-Path C:\SQLApps\GroupMembers.csv -Append

Start-Sleep 1

Write-Host  'This script has completed successfully and has been exported to C:\SQLApps\GroupMembers.csv'

jQuery的:

document.getElementsByClassName('ms-metadata')[0].innerHTML = 'something else';

答案 2 :(得分:1)

您只需按ID找到下拉列表,然后使用$(this)查找范围。

&#13;
&#13;
nextAll
&#13;
$('#OrderAssignToApprover_9002e96d-1276-4355-9a2a-0c565d8079db_\\$DropDownChoice')
            .parent('span')
            .nextAll('span.ms-metadata:eq(0)')                
            .text("Some new value");
&#13;
&#13;
&#13;

请注意,一个棘手的问题是您的select id中有<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <span dir="none"> <select id="OrderAssignToApprover_9002e96d-1276-4355-9a2a-0c565d8079db_$DropDownChoice" title="Assign To Approver Required Field" class="ms-RadioText"> <option value="f**">f**</option> <option value="m**">m**</option> <option value="m**">m**</option> <option value="t**">t**</option> <option value=""></option> </select> </span> <br> <span class="ms-metadata">AddSourceHere</span>,在jQuery中用作选择器时需要进行转义。

你也可以用直接的javascript做到这一点,但它有点讨厌。

&#13;
&#13;
$
&#13;
var select = document.getElementById('OrderAssignToApprover_9002e96d-1276-4355-9a2a-0c565d8079db_$DropDownChoice');

select.parentNode.nextSibling.nextSibling.nextSibling.nextSibling.innerHTML = "Some text here"
&#13;
&#13;
&#13;

答案 3 :(得分:0)

  

我正在尝试使用javascript或jquery找到一种方法来动态更改选择列表后面的span的文本

如果您的标题文字本质上是唯一的

$("select[title='Assign To Approver Required Field']").nextAll('span').text('whatever you like')

答案 4 :(得分:0)

您可以通过多种方式执行此操作,具体取决于您希望如何构建代码以及您愿意接受哪些依赖项。使用jQuery:

取决于范围的类

 $('.ms-metadata').text('something else')

取决于选择

$('select.ms-radioText').nextAll('span').text('something else')

你甚至可以将这两个结合起来更加具体:

$('select.ms-radioText').sibling('.ms-metadata').text('something else')

这些只是基于您向我们展示的内容的示例。还有其他方法,但适当的方法将取决于您的其余代码。

修改

根据您更新的问题,这是使用jQuery再次执行所需操作的最直接方法。将文字分配给变量newText(请注意$字符has to be escaped,并带有两个正斜杠,例如\\$}。

 var selectID = "OrderAssignToApprover_9002e96d-1276-4355-9a2a-0c565d8079db_\\$DropDownChoice";
 var newText = "something else";
 $("#"+selectID).nextAll('span:eq(0)').text(newText);