从长字符串中提取

时间:2016-04-13 20:33:20

标签: javascript string sharepoint extract

我目前正在使用SharePoint但是我有一个技术问题,我目前正在使用一些JQuery从页面库中的页面获取视频源,但是这会返回以下代码:

<dl>
  <dt>MediaSource</dt>
  <dd>
    <a href="/Videos/Life Changing/video1.mp4">link</a>
  </dd>
  <dt>PreviewImageSource</dt>
  <dd>
    <a href="/Videos/Life Changing/Preview Images/snapshot.png">link</a>
  </dd>

  <dd>Inline</dd>
  <dt>AutoPlay</dt>
  <dd>False</dd>
  <dt>Loop</dt>
  <dd>False</dd>
  <dt>InlineHeight</dt>
  <dd>360px</dd>
  <dt>InlineWidth</dt>
  <dd>640px</dd>
  <dt>ShowEmbedControl</dt>
  <dd>True</dd>
  <dt>ConfigureFromContext</dt>
  <dd>False</dd>
  <dt>VideoSetSource</dt>
  <dd>
    <a href="/Videos/Life Changing">link</a>
  </dd>
</dl>

我需要提取&#34; .mp4&#34;网址以及&#34; .png&#34; url以便我可以在iframe中使用它们,请问最好这样做吗?

我的完整代码是:

    $(document).ready(function () {
    SP.SOD.executeFunc('sp.js', 'SP.ClientContext', getVideoNews);
})


function getVideoNews() {
    context = SP.ClientContext.get_current();
    web = context.get_web();
    list = web.get_lists();
    list = web.get_lists().getByTitle('Pages');
    var camlQuery = new SP.CamlQuery();
    camlQuery.set_viewXml('<View Scope=\'Recursive\'><RowLimit>5</RowLimit><ViewFields><FieldRef Name=\'Comments\' /><FieldRef Name=\'LikesCount\' /><FieldRef Name=\'FileRef\' /><FieldRef Name=\'Title\' /><FieldRef Name=\'Rich_x0020_Video_x0020_Embed\' /><FieldRef Name=\'Summary_x0020_Text\' /></ViewFields><Query><Where><Eq><FieldRef Name=\'ContentType\' /><Value Type=\'Text\'>News Video</Value></Eq></Where><OrderBy><FieldRef Name=\'Created\' Ascending=\'True\' /></OrderBy></Query></View>');
    camlQuery.set_folderServerRelativeUrl('News Videos');
    collListItem = list.getItems(camlQuery);
    context.load(list);
    context.load(collListItem);
    context.executeQueryAsync(
     Function.createDelegate(this, newsvideoSuccessHandler),
     Function.createDelegate(this, newsvideoErrorHandler));
}

function newsvideoSuccessHandler(result) {

    listItemEnumerator = collListItem.getEnumerator();

    while (listItemEnumerator.moveNext()) {
        oListItem = listItemEnumerator.get_current();

        var newsvideotitle = oListItem.get_item("Title");
        var newsvideolink = oListItem.get_item("FileRef");
        var newsvideo = oListItem.get_item("Rich_x0020_Video_x0020_Embed");

    }

}

function newsvideoErrorHandler(sender, args) {
    alert('Camelot News Video Error: \nRequest failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以使用以下行从富文本字段中获取HTML作为字符串:

var newsvideo = oListItem.get_item("Rich_x0020_Video_x0020_Embed");

不是手动将HTML字符串解析为文本,而是可以将其转换为实际的HTML元素,然后使用JavaScript的内置DOM解析实用程序(或使用jQuery),而不是大张旗鼓,假设数量和位置<a>个元素是一致的:

var newsvideo = oListItem.get_item("Rich_x0020_Video_x0020_Embed");
var dummyElement = document.createElement("div");
dummyElement.innerHTML = newsvideo;
var links = dummyElement.querySelectorAll("a");
var videoUrl = links[0].href;
var imageUrl = links[1].href;

当然,这是while循环中的内容;如果您有多个记录被迭代,您可能希望以不同方式处理这些值的存储。上面的代码只是一个让你入门的例子。

答案 1 :(得分:0)

未经测试!您可以尝试使用jQuery查找元素,然后获取href值ex:

$(this).find("a")

然后使用.attr(&#39; href&#39;)获取href值,您应该获得所有链接的列表。