jQuery append() под идентификатором элемента?

Я создаю панель навигации, которая управляется на основе значений, полученных из списка SharePoint. Прямо сейчас я использую <ul> для заголовков столбцов и <li> для содержимого. Я могу заставить правильно отображать заголовки, а также правильно отображать содержимое этого столбца. У меня проблемы с тем, что <li> кажется добавленным к <ul>, что здорово, но он также помещает его внутрь него. У моего <ul> есть рамка вокруг него, и я хочу, чтобы содержимое добавлялось непосредственно под этой границей, но вместо этого он помещает все внутри него.введите здесь описание изображения

Вот конкретный блок кода, который я считаю неправильным:

$('#TableElement').hover(function () {
$('[id^=Header]').hover(function () {


    $("#" + this.id).append("<li>" + this.id + "</li>");
});
});

Вот весь мой код:

    ///////////////////////////////////////////////////////////////////////////////////////////    //////////////////////////////////////////
////////////////////////////////////////EVERYTHING BELOW THIS LINE IS GOOD TO    GO/////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////    //////////////////////////////////////////
//Print Headers to Screen. This will drive the core functionalty of the navpart
var siteUrl = '/sites/dev';
ExecuteOrDelayUntilScriptLoaded(retrieveListItems, "sp.js");
theCounter = 0;
var Headers = new Array();
var getCurrentElementId = null;
function retrieveListItems() {
var clientContext = new SP.ClientContext(siteUrl);
var oList = clientContext.get_web().get_lists().getByTitle('myList');
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml("<Where><IsNotNull><FieldRef Name='Title' /></IsNotNull></Where>");
this.collListItem = oList.getItems(camlQuery);
clientContext.load(collListItem);
clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded),  Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded(sender, args) {
var listItemInfo = '';
var listItemEnumerator = collListItem.getEnumerator();
while (listItemEnumerator.moveNext()) {
    var oListItem = listItemEnumerator.get_current();
    theCounter += 1;
    Headers[theCounter - 1] = oListItem.get_item('Title');
}
var HeaderDisplay = _.uniq(Headers);
for (var i = 0; i <= HeaderDisplay.length - 1; i++) {
    $('#TableElement').append("<th id=Header" + i + ">" + HeaderDisplay[i] + "::::::" +   "</th>");
}
}
function onQueryFailed(sender, args) {
alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

///////////////////////////////////////////////////////////////////////////////////////////    //////////////////////////////////////////
////////////////////////////////////////EVERYTHING ABOVE THIS LINE IS GOOD TO    GO/////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////    //////////////////////////////////////////


// You got the headers to print as expected. Right now you need to figure out how to get the current ID
// that the mouse is over. Try looking at another project you did where the mouse goes into the table header
// and the outline expands.


$('#TableElement').hover(function () {
$('[id^=Header]').hover(function () {
  // Come back to this:::::::  var content = $(this).html();


    $("#" + this.id).append("<li>" + this.id + "</li>");
});
});


//This should be the universal onmouseover event that will expose only links
//and values relavent to the selected header.

//$(document).ready(function onPageLoad() {
//    $().SPServices({
//        operation: "GetListItems",
//        async: false,
//        listName: "myList",
//        CAMLQuery: "<Query><Where><IsNotNull><FieldRef Name='Title' /></IsNotNull></Where></Query>",
//        completefunc: function completeFunction(xData, Status) {
//            $(xData.responseXML).SPFilterNode("z:row").each(function () {
//                var Headers = "<th>" + $(this).attr("ows_Title") + "</th>";
//                $("#TableElement").append(Headers);
//            });
//        }
//    });
//});

HTML-код:

<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %>
<%@ Assembly Name="Microsoft.Web.CommandUI, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> 
<%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %>
<%@ Import Namespace="Microsoft.SharePoint" %> 
<%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VisualWebPart1UserControl.ascx.cs" Inherits="AnotherMarcPart.VisualWebPart1.VisualWebPart1UserControl" %>
<!DOCTYPE Html />
<html>
<head>
    <link rel="Stylesheet" type="text/css"  href="c:\users\administrator\documents\visual studio 2010\Projects\AnotherMarcPart\AnotherMarcPart\VisualWebPart1\Stylesheet1.css" />
    <title></title>
</head>
<body>
<ul id="TableElement"></ul>
<script type="text/javascript" src="c:\users\administrator\documents\visual studio 2010\Projects\AnotherMarcPart\AnotherMarcPart\VisualWebPart1\jQuery_v1.10.2.js"></script>
<script type="text/javascript" src="c:\users\administrator\documents\visual studio  2010\Projects\AnotherMarcPart\AnotherMarcPart\VisualWebPart1\jquery.SPServices-2013.01.js"></script>
<script type="text/javascript" src="c:\users\administrator\documents\visual studio 2010\Projects\AnotherMarcPart\AnotherMarcPart\VisualWebPart1\Underscore.js 1.5.2.js">    </script>
<script type="text/javascript" src="c:\users\administrator\documents\visual studio 2010\Projects\AnotherMarcPart\AnotherMarcPart\VisualWebPart1\JScript1.js"></script>

</body>
</html>

person frank billy    schedule 10.10.2013    source источник
comment
Вам следует взглянуть на .after()   -  person Gabriele Petrioli    schedule 10.10.2013
comment
Я пробовал insertAfter(), а также after(), и они просто добавляются между заголовками, а это не то, что мне нужно.   -  person frank billy    schedule 10.10.2013
comment
вам нужно будет опубликовать свой HTML и сообщить нам, куда вы хотите, чтобы ваши элементы пошли   -  person Gabriele Petrioli    schedule 10.10.2013


Ответы (1)


Теги <li> должны находиться внутри тега <ul>. Если вы хотите, чтобы ваш контент располагался после <ul>, не помещайте его в <li> (возможно, вместо этого поместите его в <div>) и используйте jQuery .after() или .insertAfter(), чтобы поместить его после <ul>.

Кроме того, этот код, вероятно, неверен:

$('#TableElement').hover(function () {
$('[id^=Header]').hover(function () {


    $("#" + this.id).append("<li>" + this.id + "</li>");
});
});

Вам не нужны два обработчика .hover() внутри друг друга. Вы будете устанавливать второй .hover() снова и снова каждый раз, когда наводите курсор на первый. Это даст вам множество повторяющихся обработчиков событий, и функция внутри будет выполняться несколько раз.

Если .insertAfter() не совсем то, что вам нужно, покажите нам свой HTML-код и укажите, куда именно вы хотите вставить новый контент. Вы сказали, что хотите, чтобы это было после границы тега <ul>, так что это то, что будет делать .insertAfter().


В зависимости от того, как вы отредактировали свой вопрос, вы должны добавить к этому другому UL следующее:

$("#TableElement").append("<li>" + this.id + "</li>");

Это сделает <li> последним <li> внутри TableElement <ul>, который будет внутри его границы. Невозможно поместить <li> внутрь <ul> и сделать так, чтобы <li> находился за границей вокруг <ul>. Для этого вам нужно будет создать объект-контейнер ПОСЛЕ <ul> и вместо этого поместить содержимое в этот контейнер.

person jfriend00    schedule 10.10.2013
comment
Добавлен HTML-код. Я создал элемент <ul id="TableElement"> </ul>, в котором я хотел бы разместить меню навигации. - person frank billy; 10.10.2013
comment
@frankbilly - посмотрите, что я добавил в конец своего ответа. Также обратите внимание, что ваш код .hover() также неверен. - person jfriend00; 10.10.2013
comment
У меня было ощущение, что мой .hover был неправильным, но я не мог заставить его работать. У меня сложилось впечатление, что это просто что-то с SharePoint. наведите указатель мыши на веб-часть Sharepoint, которая не работает"> stackoverflow.com/questions/19261314/) - person frank billy; 10.10.2013
comment
Я сделал код, который вы рекомендовали, и он работает. Однако теперь он не попадает в правильную колонку. Он идет только под первой колонкой. Я помню, как пробовал это и решил, что должен убедиться, что я добавил его в заголовок, принадлежит - person frank billy; 10.10.2013
comment
Я также сомневаюсь в своем решении использовать <ul>. Первоначально я использовал элемент <table>, но он давал тот же результат. - person frank billy; 10.10.2013
comment
Я также должен упомянуть, что я выясняю, в какой столбец поместить контент, используя $("#" + this.id")..... - person frank billy; 10.10.2013
comment
@frankbilly - вообще непонятно, как выглядит ваш HTML, когда работает код JS. Чтобы мы могли помочь вам, вам нужно будет показать нам отображаемый HTML-код во время выполнения кода (а не шаблон) и показать нам, где именно в этом HTML вы хотите вставить это, и описать логику, которую вы должны использовать для принятия решения. какое место он вставляется. Ничего из этого не ясно, поэтому мы не можем помочь вам, пока вы не сделаете это на 100% ясным. К вашему сведению, если вы не задаете вопрос на стороне сервера, не публикуйте код шаблона. Браузер видит полностью отрендеренный HTML, а не шаблоны. Используйте View/Source в браузере. - person jfriend00; 10.10.2013